7 \XLDCPM3 MASMENU COPYRIGHT (C) 1979, DIGITAL RESEARCH  _ ͌> ͒> Ò> Ò͘~#͌ì  _  2<د2?     ه!߶2 :2 a{_:߷ʖ:߷> Ľʖ:=2–! B!6 #5ʖ:߷Ľ!ͬʧ  )!F#xʺ~0wëw!"      !~6 ͽ:ý(! #͘*~ "ڷ"͌#>?͌͘ =_.:;<> Oڅo$> !Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6 " #~?  xDIR ERA TYPESAVEREN USER ! yO#< Ty#O 3ۯ21y_͸2y2ͽ:ط˜1͘A͌>><9 2^ :߷¥.!_ ~#fow]ݭގޥ!v" ! çREAD ERROR çNO FILE ^:߷ ! ~ 3#0 Wx x ڀ ڂ G ~ # 3x~#B! Y~ɯ2:߷=!߾ý:߷=!߾:ý^T!~  6?#ˆ :`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)? ^ Tʧ͘!6!~ڇ ݯw4! Y~ʆ͌†t=ʆf ^ T ݯ2o& ) |+! <ͧÆNO SPACE ^ :Ty!B*O=?_s#"^sG!~Y޸psp2mÆÆf ͧÆFILE EXISTS  _: É: :߷ʉ=2)ͽÉ T!@k! B  }|q=qf^!~2>`~2߯2\ !!B!~> >#0  ~O#Cx2 ͘ 1)ͽÂf zͧÆBAD LOAD COMf^: !߶  $$$ SUB "C{2! "E9"1A22!ty)K!G_ ^#V*C~E ,&-AGMS! !ô!ô! Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :E B  2>: b# : y! 4 5~yy5 6 yҐ^H@Oy H H: –ͬ  #H: !  Hù H H $O͐: 2 *CN#  x: 2 p&x~+é72 H! >w_: ! 5ͤNkͱ¦ͱxʊ#Nx: ! 2 ͤ! 5™#wO~x½ p Hy<< ʑ : ! qMD#2E> ! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6 >*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C  :qn& ^#V>O ^"*}:*)=":O:o"*C *C ! ͮ~2~2ͦ:2ͮ:O:w:w |g}o*# ):BO! yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C ~i6 iw**{#zr+s{ozg**͕** ,w͜͸Ͳ!!N#F$**O!~#:A#~$=2Ek͌::/GyO>2!q*C"͡ ʔ*JҔ^:O yʃ?|x | s-|N-# S:2E!~Яw>T D^6 k-äPYy 5*{zBK5 ڋ>*C w~#+w#w+ɯ2E22i ^ *C :~w~͔͔# #  w ~>2!E5T*C!"C"C! w# F! w͌x2͢*C ~<wʃG:!ʎì 4~ʶ¬:<ʶ$ʶïZͻx>2>2ͻ:!Z2:Eẅ́͊Ͳ>2> 2T*CGͻ:ẅ́ n>2 ;O ^DM;}H>"*C ::ddslO s#r:E͊:==»y==»*Ww#*"͸* :G#š"͸:!w4 ! iw : Z!E~=26 2*C!! ~~#~O~G#n,-.‹! w! yG! x͢.:E<ʄ! q! pQ:E<. ʄ$.:E<ʄi6}2Ex N ! ~态O> G~G! ~G} *C! r#r#r ^ ͥ_y#x#{s+p+q-*C ͥ!! q#p#w*:BOYG}*MD "ã:!Bw!>2*C~=2u:B2~2wE:A*Cw>"! ""2B! "!rQQQâ ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6 :ʑw:2E**E}DQ>2  Ó5ELV_hqx|ÀÄÈÌÓÚÞ â$ͷtE(tͷtͷtͷtͷttt t!t"t#ͪt$ͪt%t&t'z2t ! ("R! "T:C*R|+"R|*T"R! "Tt4t012P2Q2<:P(2Q+2:P+:<:Q+:P+_ 1! "3"5) >2 2 !" !" ! ~~jwO1 ! VsV1!{V  : g|K xGs1%VK W{M L L L h   1234567890-=`qwy[]a;'\zm,./eiou!@#$%^&*()_+~QWY{}A:"|ZM<>?EIOU16T !336 &*D+2 :$2 ( Iu1  ## #### ### ^^n fu t    #       #       #                 SUBMIT COM * CCP COM  COPYSYS COM  DEVICE COM :  RMAC COM j   0 BNKBDOS3SPR j k l m TYPE COM  PUT COM 7  SHOW COM B  ` MAC COM \   HELP COM 8  PIP COM D " # HELP HLP R S T r s t u RENAME COM ! ED COM I) * + DIR COM r, o p q SET COM S- . / DUMP COM 1 HELP ORG 2 3 4 5 > ? @ A HELP ORG hB C D E F G H I LINK COM {  6 TR COM 7 DRIVES COM = GENCPM COM (J K L M N O RESBDOS3SPR P SETDEF COM Q HEXCOM COM U SAVE COM V LIB COM 8W X PATCH COM Y XREF COM yZ [ \ ] SID COM >^ _ GET COM 3a b INITDIR COM zc d e f g h i j GENCOM COM t$ % & ' ERASE COM ( DATE COM n HELP HLP v TYPECR COM 8 RSXRM COM 9 NDOS3 COM : NTPDATE COM ; NETSTAT COM < CPNETSTSCOM w TPA COM x MAIL COM @y z MAIL2 COM { DSKRESETCOM | LOGOFF COM } LOGIN COM ~ NETWORK COM  LOCAL COM  HELP HLP 0 HELP DAT LDCPM3 COM  HELP HLP CPM3 SYS H MODE COM  BNKBIOS3SPR k HELP HLP HELP HLP HELP HLP - HELP HLP 0 HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$    HELP $$$  HELP $$$ HELP $$$  !"#HELP $$$ $%&'()*+HELP $$$ ,-./0123HELP $$$ 456789:;HELP $$$ <=>?@ABCHELP $$$ DEFGHIJKHELP $$$ LMNOPQRSHELP $$$ TUVWXYZ[HELP $$$  \ HELP $$$ ]^_`abcdHELP $$$ efghijklHELP $$$ mnopqrstHELP $$$ uvwxyz{|HELP $$$ }~HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$ HELP $$$  HELP $$$     HELP $$$  HELP $$$ HELP $$$   RMAC COM j LINK COM {   MAC COM \   HEXCOM COM  LDCPM3 ASM *  CENTR ASM  SCB ASM  MYKEYPADASM  PUTSYS ASM  MODE BAK    LPTBL PRN $ SERIAL ASM % WIN3KP PRN 4& ' ( U V X NDOS3 ASM O) * + , - . / CRT ASM 0 1 2 3 4 TYPECR ASM 5 RSXRM ASM 6 TR ASM 57 8 MODE PRN  9 NTPDATE ASM (; < KEYBD ASM #= > LDCPM3 PRN Z? SNIOS3 ASM @ END ASM A NETSTAT ASM B MBIOS3KPPRN ! " # F G H I MBIOS3KPREL E Z80 LIB .C D MBIOS3KPPRN 9J K L M N O MBIOS3KPSYM P WIN3KP REL W WIN3KP SYM Y CPM3 SYS HZ [ \ FDC3KP PRN ] ^ _ ` b c d e FDC3KP REL a FDC3KP PRN Lf FDC3KP SYM g CRT PRN h i j k m n o p CRT REL l CRT PRN qq r s t CRT SYM u KEYBD PRN Jv w x KEYBD REL z KEYBD SYM y SERIAL PRN :{ | SERIAL REL ~ SERIAL SYM } CENTR PRN  CENTR REL  CENTR SYM  END PRN  END REL  END SYM  LPTBL REL  LPTBL SYM  LDCPM3 HEX  GETDP3KPPRN x  GETDP3KPREL GETDP3KPSYM  SCB PRN  SCB REL  SCB SYM  EDIT COM LPTBL ASM  LDCPM3 SYM  MODE HEX G: LDCPM3 COM  RESBDOS3SPR  BNKBDOS3SPR j GENCPM COM ( MBIOS SUB  GENCPM DAT  BNKBIOS3SPR k NDOS3 PRN MBIOS3KPASM VQ R S T NDOS3 REL  NDOS3 PRN  NDOS3 SYM  SNIOS3 PRN , SNIOS3 REL  SNIOS3 SYM  NDOS3 RSX  NDOS3 COM  RSXRM PRN RSXRM HEX  RSXRM SYM  TR PRN t TR HEX  TR SYM  NTPDATE PRN Z NTPDATE HEX  NTPDATE SYM  NETSTAT PRN : NETSTAT HEX  NETSTAT SYM  TYPECR PRN  TYPECR HEX  TYPECR SYM  RSXRM COM  TR COM NTPDATE COM  NETSTAT COM  TYPECR COM  SNIOS0 ASM  SNIOS0 PRN  SNIOS0 REL  SNIOS0 SYM  SNIOS SPR  SNIOS SYM  WIN3KP ASM ` DRIVES BAK  GETDP3KPASM ? MODE PRN  MODE SYM  MODE COM  FDC3KP ASM "    XXDATA $$$ ` DRIVES ASM  DRIVES PRN =  DRIVES HEX  DRIVES SYM  DRIVES COM  LDCPM3 BAK # MODE ASM $    A SUB 1x CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321Invalid file name $Error On Line $Enter Password: $ERROR: No 'SUB' File Found$CP/M 3 SUBMIT Version 3.0 $Enter File to SUBMIT: $SUBDisk Write Error$Random Read $.$Invalid ASCII Character$Parameter Error$ERROR: Directory Full$Requires CP/M 3.0 $11G"*}0|HҤb   P2IK 1">d*++"~"!\ . v!q*&    !p+q*  !s+p+q*:w#6 *  *#"N#Fy   !p+q* !p+q* 2 !p+q* !p+q* !p+q* !p+q*! !p+q* 2 !p+q* !q*- !q:2!6 1 !s+q:2!6*& "1 !p+q*< !s+p+q+p+q:=2d** w*#"*#"=     !s+q+p+q:=2ʩ*:w*#"Ì!p+qe*DM!\ .\ s   !q:a:{: :O2:eel  !6 >!ڜ 2 K*& l :w: T:_:…:r:=2O !l 6 3:•   !4**&  ~ ~ H!4Ýl  :S *Q *S l .l \ P"*}=*|&el  \ P"=*| 5      .* &  6 !6 ͝*&  ~ ( 2*&  6 e! "!\ " "\p .e .:\ 2O> :2\  *&  ~ ~ H~ H.!4 ͝*&  ~2!6>!`\ ̓ [>!6 :<2=O ! ~2 ½:<2O>9ҽ!60+~9ҽ!60+~9ҽ!60+~9ҽ!60+4:͓ ͪ! "!6:= !6 !6#6D2:è COPYRIGHT (C) 1980 DIGITAL RESEARCH @: 5@% 15252'5h+U"! ""*"5j"2u3> 2v3*5"3-ͩ-:5Z! ""$"5"5"5"5"5" " 522>2 5:4 b:4$M:(5 -C+C*M:(5!,5M[!35PMp%M(ʡͣ#v#ƒ $:5}% }! "&:5ʦ>%*#5}| V AX*|:5(# $*#5"A*#5"&#v#% RØV AR*&*R"A*5"%5!4NA#~ͫ% p"5*5N"%5!4q#͢%w 3:4(x *#5:,5o"#5V%2*5Ô; !:V :4:4{%͉"">2!:4:424*o,kÊo:4:4{,ʊ:k*%5#!(5~́ w23@:2(4y""3"323>2v3 :u3L!P46+(0>24:u3:v3"U24͋$͇%ͩ$!5*}*#5":4:4: =X !^#fk:Vj&AW y ~   8 ; C :4:4=G!4F#I ,*5͘EIr,o͉n2"5~2 r,Yo :K4 ͉:K4 " : 52> 2K4::4M:4 Mg %U!P46+:v3Ϳ$ý*3*3"3Ϳ$"3½:v3*3^#V{ʽr+s*3^#V ʽ-:v3:r+s!46#w4> 24͋$í!94~6 !(5~6 "3~,_#!4w͋$ÏV *3o6 ͋$*3~6 Þ*3:4,"3~ š6 2:4*3s#r2(5294*3#"%5͇%ͩ$@*3"5":(42:32(5Ģ >24*3"32(5 ͉r!Q4wM>=n2*5~2%! 5%~2͉:K4 v }>v S M:5p*#5*gu>%"u> %2 :5O%:4©:5[%! 4:4©:4,ʀ>:5: O%% 2)5:4:4 !*%5"-5>2'5*%5"&:4:4(:)5N:5N:4=N N*&"%52)ͫ%:(5ī%x;c!'54!'55:)5ž! ":*5ʍ! 5%Ù*5%*#5":5*%5~ *%56 ͫ%<͉:K4 "5~2o M%(>@%>#*55%! ".!/ H% : " :#$ͪ:;!6 +~<;!6 :$¨D2$X*M å:02O> p<ͪå!6 ͝: ʔ!5K ҎÄ͝xK ҥ*M Ô" :^D2:^^ :@: O :`:@O :`O " :!:/H     " *M : 2    *++" *&  ~2 : Ht !4>> ! "" \ !6 >!ڷ :+ ~° !4‘ * DM *"À  * DM ! " }2 ͣ2 :   ͪõ!q!r- "w * :w:C w *#" "*#~22_ ! 8!0 !s*& :0 !s!6 ͳ:  s ͳ:  L    ! `i^#V#~#fo yo w G: xAo o a{ _o     `i~< #~2#~2#~2* | W \  !\ ~R  2 .n~ >2 6!.t~: +  >2 6!N#F#*  " ^q#Vp" N#F##" ^q#Vp" 4! 7 o  |   ! 6    \  \   ? >_  1m  : ~# yo ɍWARNING: Cannot redirect from BIOS $ERROR: Auxiliary device redirection not implemented $ERROR: Insufficient Memory $ " "  SYSIN SUB _ ogDM! >))덑o|gQ =?i`N#Fogo& og_ {_z#W 00001 : $ SYSIN $$$   F  GET :<***.n6.t6 LL! p:~y !6  <ʊ~"x!=F#fh!:~!«!>w~:!5*.~w: ; :~! 9"1A#u.t.~@w :&/3͖!~6 :~w ucy! ʎB d{<ʑ  '*2.2+6.w 22*2$*.6#6 *.~w#~=~#4Ʌo$͖O̓! 54  !F6#ȷxO҃>^̓@_: N# ͖§>  *.>wÔ#wt~xڔp> ̓ 8> " "   SYSIN SUB  hhhhhhhhhhhhhh WARNING: PROGRAM INPUT IGNORED $ 151282 COPYR '82 DRI gggggggggggggggggggggggggggggg "D ! BH!H@ $! ! $"A! D$DHH$B!"   @ A   :p# H !}$p+q. *|$ 6 !p#6 #6 :q#,T:q# A!p#6 N:q#$N!p#6 ͒ )$ *|$ 6 , *|$ 6:"<*|$w*|$ :#w!~$6 >!~$ڗ*~$& $ 6 !~$4|!"6 #6 #6 !q#6 *p#Mc :q#ھ:p#*Ͳ ͒ 2p#ê:p#:¿:q#(*|$#~A<*|$wO>*j$M2j$2j$2l$:j$2k$2j$!l$w:l$ D!o$6I!o$6 : $!o$x:j$::j$Hu2j$T:*k$M*j$M:l$2m$"p$2n$:l$ ʲ!l$52k$Ý " 2j$:j$0O> :j$0:j$AO>" :j$A 2j$OH!m$wO `i""> !$@ ͥ > !$N ͥ *_#} bO2 ͙ "j :{#" :y#:.#:$:{#Y:{#NH{͟O[2{#Ø:{#Yͺ"͢ ͺ:.#2.#:/#2/#%#V %#͢ %##( "0 :&#!r#2&#:'##2'#:(##2(#:)##2)#:-#2-#:.##2.#:/##2/#:0#20#%#V :$}͡ :"2"!"6 "V :b#ڦ!$"" K"!>1"""""$ @""!>1"""""$  """_#;" ! "X#:$/> X#H"H@>X#H"""!r$6 >!r$@:r$"!*"~9:r$"!"X#!r$4:e#!f#2a#!i#6 !b#6 !l#6 +6 !s$6 >!s$ڶ*s$& $ ~ ʯ*s$& $ ~‘!a#6 ï*s$& $ ~¯:e#!f#2b#!a#6 !s$4b~:f#W:a#:i#:c#!i#*X#"_#:j#*X#"_# *_#"X#:k#!i# RG: $!$$5Ͱ5*p#M$:j#!c#G*_#"X#:e#QO͡ "   "ͩ 2{# n Hґ*""#:"2#!i#6 :{#°*"#""> '"­!"4:{# *"!""> '"!"4" f:z# ! "t$"x$͡  !h 6 \  ! "v$:{#t$v$;"H6*v$#"v$͔ :{#]> x$H"R\  : $\ͺ*v$#"t$:{#_ ! #&#( &#"( f#!1#6 !"6 :/#/!$#: $> x$H"!{#6 :{#Y:{#NH':$͟O[2{#!{#6Y*x$#"x$!g#6 :{#Y! $#Aͺ!z$6> !z$e*z$& %# ~2{$ ^:z$ W.ͨ*{$Mͨ!z$4/:$p>͡ !"6?" :{#ʲ:{#_ ! # "( :"ڬ>͔ ~> !":R#!":%#HH :#<2#!}#> *#& ~# N[2p# :p# H !}$p+q. *|$ 6 !p#6 #6 :q#,T:q# A!p#6 N:q#$N!p#6 ͒ )$ *|$ 6 , *|$ 6:"<*|$w*|$ :#w!~$6 >!~$ڗ*~$& $ 6 !~$4|!"6 #6 #6 !q#6 *p#Mc :q#ھ:p#*Ͳ ͒ 2p#ê:p#:¿:q#(*|$#~A<*|$wO>*p#Mc %:p#[ !#5. *|$ 6 ñ:q#1!$6#6 > !$ڰ!$6 :$<2$O>/:$!$O !J *$& *|$ H~G:$¡. *|$ :$w[œ !#5:$2$!$49:p#[¼ _ :q# !q#6+~. 2p#Oc  :q# :p#* Ͳ ͒ !q#6 +~;= 2p#Oc = :q#$ *q#& $ *|$:p#w!q#4 :p#[H !#5. *|$ 6 *|$ 6 å!$q!$6 > !$ڏ *$& > :$ˆ >!$4l > :q#<2q#O *|$ :p#w:p#?± !d#6!$q!p#6?!$:q# ͒ û 2p#:p# :p#]H!:p#A2$O>!:p# ( COPYRIGHT (C) 1977 DIGITAL RESEARCH 1 12O02Z0̀%! "K2.> 2.*M0"$/̓%! "":g0i! "P0"R0"2:0v: 0$  :[0 -ʬ+ʬ* :[0!_0M!f0P p  !   :O0Ĝ! ":O0*V0}|<r ͪ*|Ĵ:O0_͑H *V0"Ù*V0"E V» ͪ»**»"Ù*K0"X0!0NA#~' ~p"K0*K0N"X0!0q#*w œ:0!x ͜ *V0*R0:_0̍"V02*M0r ; !:r :0F: 0e%;m ">2:0b: 020 W,F:0b: 0e,ʹ:re*X0#![0~ʇww2/ͬ:2T/-"."$/2/>2.v:.ʸ!/6+͕%>20:.ʮ:.0209$<!5*}Ģ*V0":0y: 0:yv! X ! ^#fkX _~ 0^ Z   2 5 8  :0‰:0=ʉG! 0ʃF#2sÖ*I0| E2V ,[ ͊m *R0"R0"P0 m E2D2V ,ʾ ͊:/ m :/ "> 2/:Į:0 : 0 -Ͳ !/6+:.;?*$/*."$/?"$/:.l*.^#V{r+s5*.^#V ʓ:. r+s!06#wÚ> 209!e/~6 ![0~6 ".~,#!0w9 9*.~6 *: 0,Ĵ2f/*.s#r2[02e/*.#"X0$<5ͬ*$/"M00:T/2:/2[0 v>20*.".2[0v*R0m "R0͍"R0!/w >=G*R0*I0"R0"R0 m :/ }>͞ ¥͢ :O0*V0*ʿ͜">2:O0:0:O0!!4:0: 0,>"4:O0: 2\0:0=: 0 F!Fʹ%*X0"`0>2Z0*X0":0k: 0T!T:\0¦:O0¦:0=ʦ ʦ*"X0 !':[0'Tx»!Z04TT!Z05T:\0! ":]0! **V0":O0*X0~ Ĵ*X06 '>#G*I0! " :0 :Z0 !0N*K0:O0Ÿ"b0+"X0yʛ 'É' Ͳ >ͮ 222:0: 0 !ͮ-:0:0!4 :0& : 0::0!xI !4̨ e ::̮>͞ } !~5:Į ͵ !4̨!~5 G!~Ҩ4_ !p!~ʮ5^ !~> >2\0:0N *K0"+"X0:0 >''!:0N : 0,N :0 >  > !0N#~' ) > ''*K0"V0:\0x ʹ:\0" m }*K0"+"X0''*K0"V0>"4ͬ:2T/:[0 “ 2/-*M0"$/*X0!{#zڿ ~+"X0*M0+"M0wß #"K0*M0". :\0 N ]T s#r+*V0*{_zW".:\02.R     % *I0:/ ͪ% ͬ:O0ĭ%  :.ʢ :0¢ *K0+"X0!2<20*#"" : 00Ĩ!??" 09"K0+"X0$< :0¢ : 0,? ʹ  *} :]0 :O0 :0 ͤ%:e0ĭ%:0 : 0  ͬͧ%vʹ   ͺ :0: 0 !;* _ !5 ^#fkS \ h n 2 ͠ ͻ ͵ ͠ ͖ 8{ Ăy0 2͵ ͖ Gͻ ͋ ͖ 1ͻ ͯ 2ͯ ͖ (Ăy 2͵ ͋ ͖ ͖ Ăy0 ͖ 2ͯ 1 'd  ! ^#V#*0}o|g*  ":D x=D y0P 2!0^4 ! 0q :0Ė: 0,; Ė*I0m |}$† ͌oy Ԍ͋ 8O͖ Ăy01y 1m X:0 : 0, >C͘%:0 : 0 v;:0 : 0 v-!v !v-ʹ {ozg:.7ͮ2Z0!O0~4l!"*|>"V0*""J͊!/6 !/͒%:^0ʏ>2.͡%ͱ*K0*T0&*M0*T0&\ ͍!/w#õH USE FACTOR !/͒%*"P0Þ%z{*P0"R0*"V0 ! ":O0Ģ*R0̜*R0ĜG:O0xě%:/ *R0̍:xz*P0#"P0E2D20:b!^ 4!/wjj*R0!6zz{z4A_A?ɯ2.2*T0"V0!.8w# *V0*K0{zҤ*b0+"X0 =$**X0#Þ!.*V0".#"X0$:d0<:0<! 0~?<#ʐ: 0͡!. ".^#V"V0}{##~2.*.^#V#"."V0*V0}d##~<2.G*V0##"X0:.> u!.~w>w> u:.   LOADER y; ! 91""| 0! ~ʞz=_: _* " "*og *%|}D S #N#F:ʒ#4ʝ ^#V{‚: ¿*.~w*DM!  &_* .  & >k s#rr+6." "1 * D`.45. F.~. ^#Vx>`. s#rz 6 #N#fi%$g1: =<@v_}v=p{_3;{<g"T=X3 *j ~P#~R#~L{gbk#N#Fk$&Zc x {~#o}o1! ;! "Ï: = w*wW x ~#&*.~s * "ѷ\ Cannot load Program 221282 COPYR '82 DRI < b HA$@  DH     A @! "  $ $@   X X X S 1-! j 1 ".~2.~2 : Xck* kͮ  b  < .~=>$.w.6#w.6#w.61.~   .~ ~w@.p T~º>+~.~~!  yͮ Ë.~~w2g !PROFILE.S !+2 !  +~d {   O! w+w+: =w! 5 c ʋ  :p  m>> ͧ  N Ĩ –.~+w.~2  9 : ! ~##~ !7 : !Կ : x*l " !ZXچ! 6   zz: 6 : %2p  ͆ : =̀ 2r  DIR TYPE ERASE RENAME DIRSYS USER u"Q}:\ =p:r Aæ  R ÂN ͙ʸ} !M 545 x ]   ̵ 6 : oG! ~怹>2M  xf>:ͦ ͤ ͍ ͤ f ¹2 lf   ͫR  L͞L I *  *  A }_Yl ! ͮ ͒6 \ &đ %* "l ͍  ûȷ45: w ? A I N    SUBMIT COM ! ͮ ! 6 #"l  !cͿ  O !:r :ͦ ͍ ! ~B I !pͰ ^#VCOM SUB PRL y!cͰ  î ! " * %.2P #ͮ !g 4*l + "l ͷ 2 "Q x2S l "T x2V !q ~ :p ͆ .ڶ2 * og$2|  .w#w#w#w.~ .w#w~?w; ; ! ~#49 w#~$ A  < > _ I    ! 6  ! ~#Ͱ 6 m     _    ! 6 =  { *.p ѯ:r x , \  <=! Ͱ =ɯ2 \  s 2 ! D ;! : .44 #4"l ~[* 2 a7 {7 w!Y #! *l "l " ~ U #D ]T!̷ 6 * %.w#w!} 6 r 6 #w.6#6 #t#6.wo*.s#r.rͧ ̧ m . ^#V45+ w#w.f.5 \ A "l " l  |F# !( | !( : x. +"l ! ͮ   ͮ ~! G8 * ~;#1 կA *l ~:g #I ѯ*l  *l ~0څ :҅ q X x<Ü AX QX X ~@#~:k #^ *jT~# ®  wy#ù ! 4 : ! Ͱ ~@*h~ yw y/w*hw*h~I E> ͦ > æ % 0  < : ~ȹͦ #* A !g ~6 *  * >? A *l " ~0: :: q "l x ~0 xG#Gs : &͘ ͤ &ͦ %˜ >  Ʌo$>?·  !  > # ͮ x> # ~ Enter User #: $No File$ required$ERASE $ (Y/N)? $ Press RETURN to Continue $ (User 0)$ NON-SYSTEM FILE(S) EXIST$ : $$$ SUB ~Hҟ5͋4!96 5â5u!9p+q!96.*9DM9 -º59a5!96 > !95*9&  9 N0:9<295i`N#Fog_ og_ ogDM! >))덑o|g26 = 6^#V))) DM! >))R6 =J6_ og^#V) h6^#V|g}o r6_ {ozgO {ozgi`N#Fogo& og_ {_z#Wi`N#Fog , - *8& *86\!86 !84Ý*8& *8DML 28O> *8& *86 *8&  *8"8>!8Җ:8=O *8 Ǹ :8!8O *8 Ǹ HҖ*8+"8*8~<:8!8=Oo:8!8O *8 DM*8, -*8& *8~"!86!84.:8=O *8 ~ :8=O *8 6 !8p+q!86 *8& *8~ Q*8& *8~a/>z/HJ*8& *8~ w!84!8q:80/>9!8/H!8q:8A/>Z!8/H:8<28O *8 ~28*8&  *8~28!8q *8 ͏6:8<28O *8 :8w!8q!86 *8Mj/:8$H:8*8Mj*8MçCOPYRIGHT (C) 1980 DIGITAL RESEARCH ?   OVL LINKING $ $ 1L9M9!96 w:o9 !9D:! ""! ""! "9*9^#V"9"q::u9 ͥ6**=;"`:"b:q:b:͞8.96`:q:͞8"9|!96wj1:9R, v!!]:ڤ*]:& f;) N#F͋41!]:4:u92:2:2;2E;2u;2;2;2;!D:6 +6 !E:6 ! "p9! "m9}2o9!z962v92x92w9!t96X! "y:"{:"}:":":":":":":":":":":":":":"i:"k:"m:"o:}2:!:6#6#6*9"q:2C:2D:2E:2R:!"X:o& "Z:|!"s:! "p;";";";":":";"7;*+":*+":*+" ;*+"9;! ":":";"?;! ":":";"A;:9 *b::9=o& ))9  ^#V!!<4*<& ^<) <͞8-*<& ^<) ^#V"d:M*<& ^<) q#p!<4*9& ))9  *`:s#r *A:)8"p9*9& ))9 q#p:9<29O>D:9=29D:9ڗ*9& ))9 ^#V"p9  ^#V"`:*`:DM!96#~ͬ . ":\ -:+: .+: -:9":5*.:~=ͬ :9('*.:~(*.:~)H^*.:~,NDͬ :9['(:9vC()!o96>5!B".:ͬ . ":\ -ˆ*.:~=Ÿͬ ï.+: -§:9ҹ'*.:~ *.:~(H*.:~,Dͬ :9'ù:w92y9:9F:9(C(͆7:9):o9:o9H4! "p9>:o929*p9"95*.:~(*.:~ ʐn*.:~)p̀^*.:~ *.:~(HҍDO:9 ʛD*Ͳ! 6~ ̈́6* &  6 : [],()?$! : @: <_2 <: !#<ڲ*#<&  :<«>!#<4> *.:#".:*.:N2<&õ͵:< ͵!<6 !%<6 +6:%< :%<  !<6 ͸ !\ 6 ͊ !!%<6 ͊> :%<5 !͸ ͵" :<:„ :\ :%<Hb !:] A<2\ O>v !*%<& \ 6 ô !%<6:<.° ͵͊ڰ :%< ڧ !͸ ͵Ô !  :%<<2% :<02<> : :> ! "&<͵͊6 - *&<))))*<& "&<0 D͵ *&<:/͵: W :ZD͵:ڎ :!Q: D*Q:& J: : ͫ%%g >v % 222:4¦ :4 – ì !ʬ ¦ À :4:4€ ( :4 :4:€ :4€ (€ € x !4À  :€ :>S %2 !~5€ :%j B !4À € !~5€ úG!~4_ !p!~5^ !~>À >2)5:4 *5" +"%5:4ڥ >ͫ%ͫ%[%:4 :4, V :4  + !4N#~ͫ% > ͫ%ͫ%*5"#5:)5- :)5%͉}*5" +"%5ͫ%ͫ%*5"#5>@:2(4:(5 H 23y"*5"3*%5! {#zt ~+"%5*5+"5wT #"5*5"3:)5ʑ N ]T s#r+*#5* {_zW"3:)52v3 > > >2 5n2"5 %: 5*#5* 5"#5*55%"#5:5KBn2: 5O0!*", ++ *5:K4 0@:5Ĩ/ú>2) :u3ʭ :4­ *5+"%5[%2!<24*$#"$""*:40!??"4͋$"5+"%5͇%ͩ$+:4­ :4,J "*} :*5 :5%:4 +:25Ĩ/:4 :4  @S+ >2):4„ ͣ#v#: :5 $:)%k %G I k :)%:)c %k %+:4„ :4, " :4 :4/ :4 :5 $*#5^#V*S"s#r*5*#5s#r+"5 |#v#*#5" 5:4 :4/ ! "5:5> %AB,#*#5 :4:4 !;*M_ !Q^#fkox Iͻ8ʗy0IͻGͰͻHIͻ(yIͰͻͻy0ͻIH'd  ! ^#V#*"0}o|gF 9"":!`x=`y0l2!!4^4 !4q/:4:4,; *5͉: 5ª|}$ªo͕Ͱ8Oͻy0H͕H͉: 5në:4:4,>C0:4M:4  ;C:4#:4 ! #! #{ozgBB**}j!]  ~ } #ymy>2(>2v3͖*5|EB"#5>% 0,# ^#VÕJB *50MB*50! ".*5} "#5^#V"5*.s#r+".*."5:u32'5!5~4P!"*|"#5>%*5%"".o!P46 !L4*>2(>2v3͖>2(>2v3͖NB:O* 0:+5ʘ0*5*!5S*5*!5S\ gr!P4w#þH USE FACTOR !M4** "5A1z{*5~2*"#5v#! ":5(%! 5%n25%%%>%n2G:5x:L4 o:x_*5#"5:5ʽ*5|ʉIB 0>%%O%O: 5%*55%ý:5ʽ: 5O*5*5ESS ͎2O=>O͎2N=#y{#* 5* 5 "#5" 5͎21͎2=HÎ2Î20:G!^ 4!K4wOOn2!6z_{_4A_A?*!5"#5*#5*5{z*/5+"%5**+"%5% V%=͇%͢%*%5#þ!v3ʲ:( O! ^#V4@B%GFB>%%O0*#5##~<##ò*#5"|3#"%5͇%:15^:4^!4~?^#ʲ:4͆!~3 "z3^#V"#5}ʝ##~2v32w322(!~38w# ͖!~3"z3>2y3*z3^#V#"z3"#5*#5}ʩ##~<2x3G*#5###"%5:w37> ͺ!w3~w7>w> ͺ:w3Pd!5^ !K4~ B!~6 24(02w3%! >%|_}_> ͺ!w3~w:x3ʜ=͢%ͺ!w34È*#5^#V"#5!y35:24(0!^ 4!K4w>R0>V0>D>P>L>O>B>S>N0 !u~ڇK6 N4 !E s#r!U :mw* 5!] s#r!t~ ڹ6 K^ 4!1w!;p!u~K! 5N !E ~#fo!U ~2n!] ^#V"p K2oo& ) ^#fkN]ivKzV{K>ɯo> g"!6 ů{_zW5> )D*OxGғ !?u DM! xGyOڱò)â͝ddJ)=J|g}o=2o2o*p"rOxKxGyKxGy0KG*p*r}|K\\z{W¢Ü}|ڜâWʜllyWœâ!! #Qzg{ozg{ozg{ol& :oO:n2m*p" 52n2ox:4:4 ;!,ɯ2t2u2 52o=20! "5" 52m{!t~Q5_ !1~9:uK:K4 *E"5:U2 5*]" 5*v"#5:K4 $:4§:4KK !4^#=ʣV²*4(—ҌV :4:4V ! !*/O:0K>20y_j:t:_ !;~:!ts!1~y_!t~X=w_ !1~[Kdͪ>20$y$zU0! %2m*#5"v:mP>U0%4>%:m! >2m*202m! " 5/:0Kx*#5DM*5" 5}|^#V<>E0 :u3ʛ*3~Œ:v3ʁ!\4> A!(0":3]#"3,ž"3Þ-2\  :4x_ <24!K4w:94͜:94ɯ2:4284]294:4:94K)2:4;4~#!͜,!:4~*4!;4_ :94w]294ɯ<*#5"W͉#4#*W"#5ɯ2[![4Y5!!:46 "3!:4~q5!84^4 !;4~â:u3:94†G³]âʻ^¨^·:94&·!:44#wó&G294xâG:94&:4G/G&ʷ/&ʷG/G!94~&>6 23y"!v36*5"3$"32:4*W"#5GJ2:42942(524> 2S(0>24ɯ242T!4~@`6 5!^ 4#:(5O:4yD(w~$w:(50 |:(5D(A:(5?ʱ@ʱD(Aɷ͙| ;!Cͻ2(5:'5:)5:5:(5ͫ%:(5 !J24:(5 ʞ;{>24:'5ʋ:)5.:5‹;Ž*-5*%5++{Iz]~ T++]!]+?"%5:'52'5hͫ%2'5ä:(5*—:S —ʤË ¤24͙ʳ>|ʾ>:(5'2(5> :u3>+2P4(0!K46 >24>24:(52SR:4Z:'5:4=!EQM<8!LE:(5=I!NE>I!LTM>!GT:(5=M!GE2(5"4!44>24!(5:4ruͳ u͇:(5D(OʓQ˜>ßH©>2T2(5:SD(B¹>D> !452T! "4!4N#~#A07O!T/! ~*4!  ) "4 :(5 5!'':(5 :(5,;%:(5 !:(5; ,J242Z$ l ` / ‰ >24#!:(52S:4; ¡ :4/!:Z/!)!:4 :(5'#!R:(5'z 24É :(5' >24#!^ :(5 #! #!;!)!<!!Z~4z #!>!!Z~#!5z #!:Z#!G )!Rz >24>VG!>OG!>IG!>BG!0 !P!w#w#["! "#5!U3w#w#p"!u3~#4^ !v3~w!3ͷ"!3ͷ"!3ͷ"!3~w!3ͷ"!4~w!(4~wN#Fp+q!u3~#^ !v3"!3#!3#!3#!3"!3#!4"!(4"5~wN#Fq#p>B0!4"%*%F# #2P"*#5##~G=#w#6 #w]$*5!4n& {ozg"#5!5{#z$"5 f$*5!4N#yʦ$ ~Ù$ f$!U3"Q"/$:P"%*5!3{#z"#5%_ !U3*#5~#~&%~#$"5ÿ$&%! %*A1SYMBOL TABLE OVERFLOW *#5###w*#5###~,#*#5_ ####&%s#r&%^#V&%##"%5F%wF%~#!4~l%6~=ͫ%ͫ%!4N#~ͫ% y%͢%͢%2P"*ÿ*:?*ÿ*:@*ÿ*~x/~# *> x/\  ?-$-w# +!\ 6 4 #+>GO#w %+>O # <+6 2+6L#6I#6B#w2| *\ +>2*5! "B*!(5~2A*w͹*!1*>826*27*! "/5* "5!5"h* "* "* #"5"!5\, _ #~ͨ+ ¶+:;*Aͨ+>:ͨ+Ͷ+>.ͨ+Ͷ+>-ͨ+* !1+  !32*   !1+ :=* D,> D,:D*6,_ !D* W,6 4ɯ2D*2*522521528*:\ - 2;*2@*O:\ ʋ,=Ì,y!<*w#w#w#w#>2+52,5:m $>-! ~#$ª,~>-# ʱ,<*A-P-S-R-L-*,+, -,-+5~S-M-25L-15Q-8*1,-x#ñ,~A,-#ñ,#6 !1*! * !E**e  !N* +-!j**%,r-6 * ,,:=*ʂ-:>*…-2:?*ʨ-!***ѯ2:*29* ,,!3*60#60#60#>235! "*:5ͨ/-! "f*2Q*2e**E*+!1* z{:*5G.*B* -.! "B**\  ..*B*#"B*+ ~¤.:u32*5G.*\ !F2+ *f* -•.*! "f**h*ʹ*E*  €.a.Ò.Ҫ.ʒ.6# ‹.͹**h**f*#"f*~!2* G:=*..xx/.x.1,..****w#"*! -*! "***j*!*-/~5/ʹ*  9//͹*!2*1L/****w#"*! -*! "****/_ !5*~ ͳ.27**/5}!1~ /ͳ.#/> ͳ.>#ͳ.ͅ/> ͳ.*/5~/ͳ.#/> ͳ.> ͳ.> ó.}26*!7*è/Oͳ.:K4 :5:=*yx/:8*!5I0:25!*5—0~0:K4 0!K4~ —0:350:P4+—0:,50ʗ0:Q4#0:L4 0:,5=ʗ0 !K4~ ʇ0!4s!7*~!6*Ԩ/4:4!K4ʺ0G~ 0#x=ë0> 0> 024!K4>x6 #=0G!K4~ p%,**}0>ͳ.0*j*+:+5ʨ/0!s*6S#6Y#6M#w!*w:>*2=*! "*%,ʨ/26**j*կ ,,0:?*1::*Z1ͬ2L1͎2**}1}w1>B/a1}|Gd/ :?*ʓ1**+![2* CP/M RMAC ASSEM 1.1 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 : 5O !5 ~#fo: 5O !5 s#r:?*yʟ2š2ͬ2Ž2G:9*29*!:*4>6 :9*L/29*2%#333/3 3333#332E3 3           MXList WAITING FOR PRINTER $PRINTER READY $ çCOPYRIGHT (C) 1980 DIGITAL RESEARCH ?   OVL LINKING $ $ 1L9M9!96 w:o9 !9D:! ""! ""! "9*9^#V"9"q::u9 ͥ6**=;"`:"b:q:b:͞8.96`:q:͞8"9|!96wj1:9R, v!!]:ڤ*]:& f;) N#F͋41!]:4:u92:2:2;2E;2u;2;2;2;!D:6 +6 !E:6 ! "p9! "m9}2o9!z962v92x92w9!t96X! "y:"{:"}:":":":":":":":":":":":":":"i:"k:"m:"o:}2:!:6#6#6*9"q:2C:2D:2E:2R:!"X:o& "Z:|!"s:! "p;";";";":":";"7;*+":*+":*+" ;*+"9;! ":":";"?;! ":":";"A;:9 *b::9=o& ))9  ^#V!!<4*<& ^<) <͞8-*<& ^<) ^#V"d:M*<& ^<) q#p!<4*9& ))9  *`:s#r *A:)8"p9*9& ))9 q#p:9<29O>D:9=29D:9ڗ*9& ))9 ^#V"p9  ^#V"`:*`:DM!96#~ͬ . ":\ -:+: .+: -:9":5*.:~=ͬ :9('*.:~(*.:~)H^*.:~,NDͬ :9['(:9vC()!o96>5!B".:ͬ . ":\ -ˆ*.:~=Ÿͬ ï.+: -§:9ҹ'*.:~ *.:~(H*.:~,Dͬ :9'ù:w92y9:9F:9(C(͆7:9):o9:o9H4! "p9>:o929*p9"95*.:~(*.:~ ʐn*.:~)p̀^*.:~ *.:~(HҍDO:9 ʛD*Ͳ! 6~ ̈́6* &  6 : [],()?$! : @: <_2 <: !#<ڲ*#<&  :<«>!#<4> *.:#".:*.:N2<&õ͵:< ͵!<6 !%<6 +6:%< :%<  !<6 ͸ !\ 6 ͊ !!%<6 ͊> :%<5 !͸ ͵" :<:„ :\ :%<Hb !:] A<2\ O>v !*%<& \ 6 ô !%<6:<.° ͵͊ڰ :%< ڧ !͸ ͵Ô !  :%<<2% :<02<> : :> ! "&<͵͊6 - *&<))))*<& "&<0 D͵ *&<:/͵: W :ZD͵:ڎ :!Q: D*Q:& J: : > !:*!^:6 +":^:$t 8'>  *0< ~L *0< DMB5 *0< 6*0 w#6 !4 w#6 *0<##N#F*.< ~O `i~8p8!6 Ͷ8ikS *0< DMv5 *0< DMd5 *0< *0<##N#Fq#pä*0<##q#p*u:#^#V *u: ^#V *u: ^#V*u:~*u:~*u:>*u:~ *u: ^#V *w: ^#V!8:=<Hw!>:><Hw!?:?<Hw!@:@<Hw!B ͔8> ͥG<ͮ8'*u:"w:*E<#"E<ͺ"u:> ͔8$> ͥG<ͮ8!T J<ͫ8:P< Hr:Q<ҁ!U<6 Æ!U<6:U<q:ͫ8+s#r!`:͹8ң96:T<Һ*J E<ͫ8*P<& i:) N#F,DM,*L E<ͫ8F*P<& i:) *q:s#rN*q:DMͷ!V<6 >!V<ڷ! "Y<*V<& i:) ^#V"u:> u:ͫ8ʝͺ"W<*Y![<,*[<& i:) ^#V"u:*[<& <) N#F.> u:ͫ8%OkͥDMͪͮDMͪDMͪͺ"u:![<4! "i:"k:"m:"o:*d:##6  *d: 6 *d:^#V!`=p+q*d:*_=s#r *d: >!a=q *d: :a=w*d:##>?!b=q*d:##:b=w*d:##~*d:##>w*d:##~*d:##>w *d: ~!c=q *d: >:c=Hẅ́d:8++"\<*\<^#V!e=p+q̈́d:8++"\<*\<*d=s#r *d: ^#V!g=p+q *d: *f=s#r *d: ~!h=q *d: >:h=Hw!k=s+p+q!^=6 :k==2k=ʱ*i=:^=2^=*i=#"i=Ñ:^=2^=!n=s+p+qͽ"d:`:d:͞8͹ h!n= *l= *d: DM*n=>* >̈́d:8+s#r!r=s+q+p+q*o=DM*q=̈́*^=& ^<) ^#V"d:> d:ͫ8ʆh!q=}*o= *d: DM*q=>*}U!r=}>M"d:<> !|=r+s+q+q+q+p+q+q+p+q:u=2}=:z=Һ!}=44*`:"d:*}=& "`:q:ͮ896<*s=DM*u=̈́*^=& ^<) N#FU*^=& ^<) *d:s#r*}=M͍*v=DM>*y=M*u=Ms*x=Mf*u= *d: *s=DM -B:z=Y*{=DM *d: ~#k!{96 MODULE TOP $UNDEFINED START SYMBOL: $YY???? $$$XX???? $$$RQST$ UNDEFINED SYMBOLS: $ABSOLUTE $CODE SIZE $DATA SIZE $COMMON SIZE $USE FACTOR $!=q*=MͲ!~=4!=q> !=8:=0OͲC:= AOͲ!=q:=O:=O!=p+q!=̈́8MD>=08MD:;!t;!;!;:u;2\ . ]  -Ÿ\ ͩ6!t;6 !;6 !;6 !;6 !=6 +6 >!=*=& f;) ^#V"= *= ~  *= DMv5 *= 6 !=6:=<2=:=7::2\ . ]  -)\ ͩ6*p9###H:ͮ8!D:U!\:6 *p9###F:ͮ8!C:r!\:6 *p9###X:ͮ8҉!\:6 :R:> S:ͫ8:U:H:C:/HҼ!\:6 !\:6:E:!C:!\:6!\:6 :C:*F:"::\: *p9###":*p9"::D:*H:":8*:*:"::r98 *: )8":*:*:":Z:X:͞8_X:Z:͞8#"y:e! "y:!:6 *X:":!=6 >!=ڞ*=& y:) > Ͷ8Ҕͥ:=<2=v! ":::2=!=6 :=#w:==2= *=& :) *=& : N !: ͠8*=& : ~2=*=& :=w:=2=:=<2=õ*=& : :=w::<2:*b:"d:`:d:͞8q͜/!9H`2UO !: 8DM>ͪ̈́d:8+s#r&!]:6 >!]:7*]:& f;) N#F͋4:*]:& <) N#F.B2=:="="=:=O> "=n2=ð-*]:& i:) ^#V"u:> u:ͫ8-2=ͥ"=ͮ"=!"=nͺ"u::]:<2]:w!=r+s+p+q*=}*=_DM͘4*=#*=|_͘4!=p+q*="d:2:=2=:=O> Ґ*=DM^"=ã*=& :) =8"=:=O> :=O> ==͞8UO !: ͹8"=*=*="=*=DM*=8 *d: ~ *d: :!z9/H! "=ͽ"d:`:d:͞8HҴ>=08> ͔8S6!~=6 U`/wUp/>=08 \8 M`͹ҖÞ2DM_   *=#"=̈́d:8+s#r > !=Ͷ86!=6> #w#6 2~=ͽ"d:`:d:͞8N/=:=!=6 >=08> ͔8'6!~=6 w*=#"=>&8)))M`̈́d:8+s#r> !=Ͷ8\66!=q!=:~=v d!=6h!=ڤ:==O ! *d:N:=<2=|:E: J:*Q:M 2"V:! "V:|!=6:Q:!=:==O !J: NͲ:=<2=6D:R:*U:& :) S:8"V:D> !{:Ͷ81*:"V:DX:ͣ8D*X:"V:Z:X:͞8mX:Z:͞8#DM*X:v  6*:DM*:6*:DM*:6*:DM*:6`:s:͞89ͮ8*9| =ͫ8 Ͳ(Ͳ*=DM_-Ͳ*=*=+DM_)Ͳl*|9DM_68f ͥOr:t9Z^E.:n~:x9ZyU/?OVLAY?OVLA0RELIRLIRLREL))O `i~8p8> !:!>6::!>:>=O !: NͲ!>4½)2:͕":)2:::  !:6!>6::!>. ):>=O !: Hq!>4  *h & \8*| & "9>*7:DM\ ͏5*9+"9!>q:>2]:*]:& f;) N#F͋4!>q:]:!f:Ҏ *]:& y:) N#F*>͘4:]: Z:y:͞8Ҽ *y:"Z:X:y:͞8 *y:"X:*]:& y:) N#F+q#p!>s+p+q::2>O !: :8">*>DM*>h!ͮ"!>2>:> > !>ͫ8HA!ͱ!">G!*!>">*>DM*>MC:> e!*]:M͋ !*>*>*]:*>*>   5:=Ҭ!ͱ!"!>> ͔8ž!*!>">!>6 í! !:]:2%>*>M^ *>DM4*>#DM4O `i~8p8"#>*%>M^ *#>*b:"d:`:d:͞8%" *d: ~#" *d: 6 ̈́d:8+s#r!!{96 :*:M H"H"!^:6:*:Mi"2"g:͜2f:o"=6*:::: -y"::29:*::ͺ/Ҵ":*:    ͉:*:M"!:͹8"/Ͳͯ/Ͳ Ͳ=6#:*:*:*:*:͉*:*:"::*:M /I#:*:     ͉*d:DM :*:M ҟ#{#=ͯ6Ü#*:& :) :8DM>*:Mf#:*:*:& :) :8*:  ͉*]:& y:) N#F   *]:*:DM5!=6#!=6 *:":*:M^ :]:$$*g:*:":C$*]:& :) :8*]:& y:) q#p:]: P$!=6*]:& y:) N#F *:":> !:Ͷ8:: HҲ$:R:Ҕ$=6ò$*:& :) :8"S:::2U:!R:6:0:$)$ò$!&>6>!&>%%*&>& :) *&>& :) 8*&>& :) q#p*&>& y:) q#p*&>& :) > w#6 :&><2&>$s:q:͞87%*q:"s::G%͸*9"q:^ :_:/2^::{9]%!!)>s+p+q:)>ˆ%*g:*'>"'>:f:҅%!)>6 Ý%*)>& :) '>8+s#r*]:& y:) N#F*]:%*'>DM*)>M͋%*]:& y:) N#F*'>*)> *]:   5 y  y !*>q:*> &>!*>&:*> #&+"ÿ&:*>1&p"ÿ&:*>?&k$ÿ&:^:ҿ&:*>=O !& ^#VI"ÿ&ÿ&͈"ÿ&>ÿ&͵"ÿ&#ÿ&T#ÿ&#ÿ&#ÿ& $ÿ&$ÿ&Q$ÿ&d$ÿ&W&]&`&f&o&u&{&&&&&&&!+>6) &)2->:^:&*->My (')2,> ')2+>:+> '*+>M%('͕".>:^:('*.>DM*,>^%:+>&7','!0:6&H'='!0:6! "1:"7::!:'*: ͗8"1:"7:. 9\ -u')29!h ʦ':92h \ ͕6¦'\ =45)2| 29!:6*7:"1:! "9"9^ :_:/2^::!:!_:' ',':e  (.e  -'e >*2!:\ d5I'} /B(}    ͉ͽ"d:`:d:͞8)͹(:v92\ !0>6>!0>گ(h!0>҈(*0>& \ 6 å(:0>=O ! *d:*0>& \ w:0><20>g(!!:6.e  -¼(\ W5/(!!:6 .e  -(\ d5*d:"1>!_:6I'*1>"d:̈́d:8+s#rI(.: -)!:6!:6^ ͽ"d:`:d:͞8)/)*{:DM>fy  ^%y ! ": y  y *d:"4>#*4>"d:!3>6>!3>)h!3>ڶ):3>=O ! *d:Ny û) y :3><23>Œ) *:"::)͸*9"q:̈́d:8+s#r5) !0:4~ (*6*1:#"1:*7:{z*! "1:/ *1:!>~26>xG:6>26>G )x{_ P*#B*>ɯ`i q#zV*COMPRLRSPSPROVLSYM!;>q*5:> :;>w*5:#"5:!3:͹8ڦ*>*3:DM\ ͔5! "5:!<>q:8>!<>28>:7><27>*!7>6 *8>Mq*!8>6 !=>q*=>Mq**A:#"A:!?>p+q*>>}O**>>|O*:: +:o9 +h,*p9"A::\:,+**V:DM**X:":!@>6 ::=!@>q+*@>& : N !: p9͞8j+*@>& : N͍+!@>47+:o9 :o9HҌ+ -!C>q:C> ¢+*X:"D>ó+*C>& :) ^#V"D>D>A:͞8+96D>A:͞8+ *+*C>& f;) N#F͋4*C>& y:) > Ͷ8,:C> ,*X:DM',, ',|9A:͞8&,*A:"|9!G>p+q*F>"H>*C>& y:) F>8+!H>͹8g,*H>DM4O* *H>"H>3,::=O !: N !: !y: 8*p9͗8"A> **A>DM* *:o9, * **p9DM*,*m9DM* * * *:r9,*:DM*, *!J>6>!J> - *!J>4,*p9"A::\:(- ͦ- ͦ-ͦ-!L>6 ::=!L>|-*L>& : ~2K> u-*K>& :) A:͠8e- ͦ-J-:r-.u--!L>4--*p9*A>A:ͮ8ҕ- ͦ-|-:7> ʥ- ͦ-Õ-!O>q*O>Mͧ**A:#"A:M>A:͞8- ͦ-ù-ͦ-*K>& i:) ^#V"u:> u:ͫ8.ͥ*K>& :) 8"M>͹-ͺ"u:-*K>& <) N#F. *0< ~R. *0< DMd5 *0< *0<##N#Fq#p].*0<##q#p2P>:P>ʤ.*K>& :) 8"M>"9:P>O> Ҙ."9͹-2P>c.>5:08> ͔8ʾ.q*å.>*5:DM\ ͔5\ v5:w9Z.. \ ": -.:e /.*o9&  \8_* DMe - /:w9 #/:w92\ \ B5:9 A/. ~9\ -9/! "5:}28>27>*ͥ.:x9Z^/. \ ": -f/.e n* -v/:x9 ʌ/:x92\ \ B5! "5:}2R>ͽ"d:`:d:͞8(0͹/H02DMv0 q*!Q>6h!Q>/:Q>=O ! *d:Nq*:Q><2Q>/:R><2R> 0 q* q*0 q*̈́d:8+s#râ/ q* q*ͥ.!S>q> !S>O0:S>0Oq*Z0:S> AOq*!T>q:T>O60:T>O60!V>p+q*U>|O[0*U>}O[0*9>! =8"W>*W>! =8!Y>s:h 0:Y>2h \ ͕60\ >645*W>! =8!| s2*9͗8"9>. \ ~9 -0:9 1ì COPYSYS v3.102 (c) 1983 Magnolia Microsystems$ Get System from what Drive (RETURN to quit) ? $ Getting System from file "d:filename.typ"...$ Insert disk in Drive @: and push RETURN (^C aborts) $ Put System to what Drive (RETURN to quit) ? $ PERMANENT ERROR reading drive @:$ PERMANENT ERROR writing drive @:, Disk will not be bootable.$read from$written to$ System Successfully $ drive @:$ Can't COPYSYS to destination drives's media format$ INVALID DRIVE for current system$ Source File INCOMPLETE$ System is too Large for Drive @:$ Must run under CP/M 2 or 3$ 'S' option and command line mode changes not allowed together$ Bad command line option$ Wrong boot loader for destination drive$ Wrong boot loader for physical drive number specified$ Wrong version boot loader-COPYSYS can not reconfigure for destination drive $ No Directory Space$ Disk Full$ Verify-Read Error$ Verify Error$ File renaming error$ Boot loader has been reconfigured to $sd$dd$ss$ds$st$dt$ "d:filename.typ" not Found$ "d:filename.typ" Copied Sucessfully to drive d:$ -C :l f@2Zx:m x2Z:\ ʁ@2Y:] ʓ>2Y7ɯ! : O >[![ ͕VS 9͕  V_+OD  T  SV D 1͕OD  T  S N_ ONd͕VC  OE  OS ͕ʭ! Ð !N0V:V0G͕ʌ0V:V0OxGx2\O~#,]( 7!0 1n!   } ڣ! 0! @ң  ]͕:Y–>C2e >O2f >M2g !\ !g \  <"!\ ! Ð ! "| \ # *}  Bne*KB )L ! ne>A2M! Ð "} !  \ ! *} #"} xq:Yº!5 ʐ ʐ AQ2MO!G=ͤ  Ý:Y!  2A2<0 !b *[R )|2A:Z4! ʐ ʐ AJQJ2LO!O{ =ͤ P *?^  Fx! mkbme:AO|}ҍ!  ! Ð ) ͞ I ͦ $ :Z´!  !<60 !l :Z ! Ý!" ^#V#zy~#= A~#   ~#    :[O W! :[g(!! >, :[w(!! :[>, :[o(!! ! =ʇ ) ]T% > ͤ T ã ÿ Ú __ * .  C S " 2  2 *? :D a :D2Na f„#v nʄ:[OWv- ˧^8 ˯V(˿+nN ˷2[* .p~#fo~( :[ 2[###~„^„V„:[OW~pG+~(:[2[! "B*? ~#NG! ʼ )ô "B <:= O> Ϳ y2D| ^#fk"?_  "?* .l~2D<: ! :[2[>2\:[_:D!ݖ @ ݾ! Ð :[OT W:r :r :[r !Ô !!~  ʎ ###y nf:[p_ ~2:\!ݖ ڼ ݾ ! Ð :\2!  a{__ > > !w  # ~$ # > Û > Û > Û > Û >Û !"=*?^  Fx! S kbS K :A] o& ͡ 2:<2;::O  :;O  *=MD :<ʒ ) Õ $ *=[B"=z !;4~t 6!:4k :<$ 7:[G!["G* . [GR}|o> g"I! :Y!  ͜:M@2! 6$#6$#6$#͜:L@22K i  y*G"E*I[E! "E  §+| *I| *G"E$ [E! "E  ‚+| n *G"E!  ‹*En‘# "E+| :Ke  !  !& +6$+6$+6$2% ʗ!:L2D! !! !_ Ð (!u!!!6 T] ɯ/2K[IRÔ ! .    CCP COMCPM3 SYS ??????????? ) : N_ !m͹ ͒ * &  N͏ * M* ͏_ *{ #q#p O *{ w:; eO *{ w*{ ~: : :; e2  *{ 6 -:; eO *{ w! s+q: ! ! 6N!m" :  [!n"   h  +s#r! 4E! 6 > ! һ: =2 ҝ! 6 * & ) : ͎ ! Ҹà *{ ~2 *{  ~2 *{  ~2 *{ #^#V" +! ͚ ! s@! 6 :  1b CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321NAMES~VALUES~HELP~CON:~CONIN:~CONOUT:~LST:~AUX:~AUXIN:~AUXOUT:~CONSOLE~KEYBOARD~PRINTER~AUXILIARY~AXI:~AXO:  &+07?GPXbgkXON~NOXON~NULL~50 ~75 ~110~134~150~300~600~1200~1800~2400~3600~4800~7200~9600~19200  #'+/49>CHMRWCOLUMNS~LINES~PAGESIZE  []=, NONE 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 "$*&("*&(INPUT $OUTPUT $SOFT-BAUD$SERIAL $XON-XOFF $Error at the '^'; $Error at end of line; $Invalid number$End of line expected$Invalid delimiter$Invalid option$Baud rate can not be set for this device$Invalid physical device$Physical device does not have input capability$Physical device does not have output capability$Physical device does not have input/output capability$A NULL device can not be assigned to CONIN$Ambiguous assignments to a NULL device are not allowed$Physical Devices: $I=Input,O=Output,S=Serial,X=Xon-Xoff $ $ Bad Logical Device Assignment; $Physical Device Does Not Exist$ $File$Null Device$Current Assignments: $CONIN: = $CONOUT: = $AUXIN: = $AUXOUT: = $LST: = $Console width set to $ columns Console page set to $ lines $CONIN: = $CONOUT: = $AUXIN: = $AUXOUT: = $CONIN: = $CONOUT: = $AUXIN: = $AUXOUT: = $LST: = $Physical Device: $Baud Rate: $Characteristics: $PARALLEL$Requires CP/M 3.0$Device Reassignment Not Supported$Enter new assignment or hit RETURN $1b1b͏}0͏|HX    "g: > gH|! "}Z :: H:H|b   > g–X   ͘2e͘2f.x*gDM -² A/;SX }h2i !~6 *i&  6 ~A/   !l6:i!l5*l& ~ Nͬ *l& ~ w:l<2l :i2db   v!q*&  ! p+q*  ! s+p+q* : w#6 *   * #" N#Fy   ! q: 2!6 1 !q:2!6 1 !s+q:2!6*& "1 !r+s+q:2!6*#s#r1 !q:22 !q!6*&  > > *&  :R :!4, !r+s+p+q+p+q͐ !#6 *~ *~2#* M# 2!'6: · :'ڪ ú * M# 2Õ v :24 :22&*~2$!'6 *~2# *~ P *N ! ** =2%!&D !'6!6:&!A :': !4# G *6 4 *:$w:}{+s#r͐ : z *}#"} !6:#2(O * ~2*& *: !(4*:(w*& *: ¿ *(& *~2Ñ *6 *}~2 ̀ :2!!6*}#~2 !!4N * : !'6 $ *!& *: $ !'6 !4N *} ~2 *& *}~2 * M# 2:>!H} !4N *} ~2 * M# 2L :2}{#+s#r*}N# 2!« *}#"}Ð !)q:)a :){ :) :) H H!-s+q+p+q:-=2- **:,w**#"* !.q!76 *b"3"5:e( !e6(*d& *e& ͈!1s*d& ͊!2s:.:.Ha *}+"}p :}++s#r !/6:1!/ږ *3"5*eMS !/4x *2MS :7ҭ Xó /X:e?Ҿ *.M !1 ^#VFXG UXG jXG |XG XG XG XG XG +XG aXG XG    (    !8q!06:8!0{ *3NH*3#"3!04\ !06:8!0ں *5}§ !76^Hì  H*5#"5!04ƒ !;s+p+q! "<!;>w *;M!<+s#r*<9+s#r!>q! "@}2?>!?3*?& m ~,*@DM*?; "@!?4*>M*@!Bq!C6 >!Cp*B& ))) *C& NH!C4H!Dq*D& )))  ~2FO>ҕ!F6 !E6 >!E *F& Ͳ *E& NH!E4š!Gq!I6 *G& )))  ~2H2HIH!I4:H2HOH!I4:H2H'SH!I4:H2H>XH!I4:IR H!I4> XX:e2J(r!J6(*J& ! ͈!Ls+6 !J6*K& ))) ~   *KM? H*KMq H*KMX!K4+~!L Å!J4Ê!Qp+q:e2c(!c6(:c _ ! ͈!es!c6 >!c/*P)"P*c& S w!c4 !c6 *c& ))) ~ X:cQX!c44:c2f!R6 !d6+6 >!c*c& S ~:f!cҝX%X !R6*cM? H!d4:e!d6 DX!c4k:b!R6OX:R TX `X"Ͱ:DM9͏5*:@ ~ !92(< !92)<7 :)<ր2) > !:*!^:6 +":^:$t 8'>  *0< ~L *0< DMB5 *0< 6*0 w#6 !4 w#6 *0<##N#F*.< ~O `i~8p8!6 Ͷ8ikS *0< DMv5 *0< DMd5 *0< *0<##N#Fq#pä*0<##q#p*u:#^#V *u: ^#V *u: ^#V*u:~*u:~*u:>*u:~ *u: ^#V *w: ^#V!8:=<Hw!>:><Hw!?:?<Hw!@:@<Hw!B ͔8> ͥG<ͮ8'*u:"w:*E<#"E<ͺ"u:> ͔8$> ͥG<ͮ8!T J<ͫ8:P< Hr:Q<ҁ!U<6 Æ!U<6:U<q:ͫ8+s#r!`:͹8ң96:T<Һ*J E<ͫ8*P<& i:) N#F,DM,*L E<ͫ8F*P<& i:) *q:s#rN*q:DMͷ!V<6 >!V<ڷ! "Y<*V<& i:) ^#V"u:> u:ͫ8ʝͺ"W<*Y![<,*[<& i:) ^#V"u:*[<& <) N#F.> u:ͫ8%OkͥDMͪͮDMͪDMͪͺ"u:![<4! "i:"k:"m:"o:*d:##6  *d: 6 *d:^#V!`=p+q*d:*_=s#r *d: >!a=q *d: :a=w*d:##>?!b=q*d:##:b=w*d:##~*d:##>w*d:##~*d:##>w *d: ~!c=q *d: >:c=Hẅ́d:8++"\<*\<^#V!e=p+q̈́d:8++"\<*\<*d=s#r *d: ^#V!g=p+q *d: *f=s#r *d: ~!h=q *d: >:h=Hw!k=s+p+q!^=6 :k==2k=ʱ*i=:^=2^=*i=#"i=Ñ:^=2^=!n=s+p+qͽ"d:`:d:͞8͹ h!n= *l= *d: DM*n=>* >̈́d:8+s#r!r=s+q+p+q*o=DM*q=̈́*^=& ^<) ^#V"d:> d:ͫ8ʆh!q=}*o= *d: DM*q=>*}U!r=}>M"d:<> !|=r+s+q+q+q+p+q+q+p+q:u=2}=:z=Һ!}=44*`:"d:*}=& "`:q:ͮ896<*s=DM*u=̈́*^=& ^<) N#FU*^=& ^<) *d:s#r*}=M͍*v=DM>*y=M*u=Ms*x=Mf*u= *d: *s=DM -B:z=Y*{=DM *d: ~#k!{96 MODULE TOP $UNDEFINED START SYMBOL: $YY???? $$$XX???? $$$RQST$ UNDEFINED SYMBOLS: $ABSOLUTE $CODE SIZE $DATA SIZE $COMMON SIZE $USE FACTOR $!=q*=MͲ!~=4!=q> !=8:=0OͲC:= AOͲ!=q:=O:=O!=p+q!=̈́8MD>=08MD:;!t;!;!;:u;2\ . ]  -Ÿ\ ͩ6!t;6 !;6 !;6 !;6 !=6 +6 >!=*=& f;) ^#V"= *= ~  *= DMv5 *= 6 !=6:=<2=:=7::2\ . ]  -)\ ͩ6*p9###H:ͮ8!D:U!\:6 *p9###F:ͮ8!C:r!\:6 *p9###X:ͮ8҉!\:6 :R:> S:ͫ8:U:H:C:/HҼ!\:6 !\:6:E:!C:!\:6!\:6 :C:*F:"::\: *p9###":*p9"::D:*H:":8*:*:"::r98 *: )8":*:*:":Z:X:͞8_X:Z:͞8#"y:e! "y:!:6 *X:":!=6 >!=ڞ*=& y:) > Ͷ8Ҕͥ:=<2=v! ":::2=!=6 :=#w:==2= *=& :) *=& : N !: ͠8*=& : ~2=*=& :=w:=2=:=<2=õ*=& : :=w::<2:*b:"d:`:d:͞8q͜/!9H`2UO !: 8DM>ͪ̈́d:8+s#r&!]:6 >!]:7*]:& f;) N#F͋4:*]:& <) N#F.B2=:="="=:=O> "=n2=ð-*]:& i:) ^#V"u:> u:ͫ8-2=ͥ"=ͮ"=!"=nͺ"u::]:<2]:w!=r+s+p+q*=}*=_DM͘4*=#*=|_͘4!=p+q*="d:2:=2=:=O> Ґ*=DM^"=ã*=& :) =8"=:=O> :=O> ==͞8UO !: ͹8"=*=*="=*=DM*=8 *d: ~ *d: :!z9/H! "=ͽ"d:`:d:͞8HҴ>=08> ͔8S6!~=6 U`/wUp/>=08 \8 M`͹ҖÞ2DM_   *=#"=̈́d:8+s#r > !=Ͷ86!=6> #w#6 2~=ͽ"d:`:d:͞8N/=:=!=6 >=08> ͔8'6!~=6 w*=#"=>&8)))M`̈́d:8+s#r> !=Ͷ8\66!=q!=:~=v d!=6h!=ڤ:==O ! *d:N:=<2=|:E: J:*Q:M 2"V:! "V:|!=6:Q:!=:==O !J: NͲ:=<2=6D:R:*U:& :) S:8"V:D> !{:Ͷ81*:"V:DX:ͣ8D*X:"V:Z:X:͞8mX:Z:͞8#DM*X:v  6*:DM*:6*:DM*:6*:DM*:6`:s:͞89ͮ8*9| =ͫ8 Ͳ(Ͳ*=DM_-Ͳ*=*=+DM_)Ͳl*|9DM_68f ͥOr:t9Z^E.:n~:x9ZyU/?OVLAY?OVLA0RELIRLIRLREL))O `i~8p8> !:!>6::!>:>=O !: NͲ!>4½)2:͕":)2:::  !:6!>6::!>. ):>=O !: Hq!>4  *h & \8*| & "9>*7:DM\ ͏5*9+"9!>q:>2]:*]:& f;) N#F͋4!>q:]:!f:Ҏ *]:& y:) N#F*>͘4:]: Z:y:͞8Ҽ *y:"Z:X:y:͞8 *y:"X:*]:& y:) N#F+q#p!>s+p+q::2>O !: :8">*>DM*>h!ͮ"!>2>:> > !>ͫ8HA!ͱ!">G!*!>">*>DM*>MC:> e!*]:M͋ !*>*>*]:*>*>   5:=Ҭ!ͱ!"!>> ͔8ž!*!>">!>6 í! !:]:2%>*>M^ *>DM4*>#DM4O `i~8p8"#>*%>M^ *#>*b:"d:`:d:͞8%" *d: ~#" *d: 6 ̈́d:8+s#r!!{96 :*:M H"H"!^:6:*:Mi"2"g:͜2f:o"=6*:::: -y"::29:*::ͺ/Ҵ":*:    ͉:*:M"!:͹8"/Ͳͯ/Ͳ Ͳ=6#:*:*:*:*:͉*:*:"::*:M /I#:*:     ͉*d:DM :*:M ҟ#{#=ͯ6Ü#*:& :) :8DM>*:Mf#:*:*:& :) :8*:  ͉*]:& y:) N#F   *]:*:DM5!=6#!=6 *:":*:M^ :]:$$*g:*:":C$*]:& :) :8*]:& y:) q#p:]: P$!=6*]:& y:) N#F *:":> !:Ͷ8:: HҲ$:R:Ҕ$=6ò$*:& :) :8"S:::2U:!R:6:0:$)$ò$!&>6>!&>%%*&>& :) *&>& :) 8*&>& :) q#p*&>& y:) q#p*&>& :) > w#6 :&><2&>$s:q:͞87%*q:"s::G%͸*9"q:^ :_:/2^::{9]%!!)>s+p+q:)>ˆ%*g:*'>"'>:f:҅%!)>6 Ý%*)>& :) '>8+s#r*]:& y:) N#F*]:%*'>DM*)>M͋%*]:& y:) N#F*'>*)> *]:   5 y  y !*>q:*> &>!*>&:*> #&+"ÿ&:*>1&p"ÿ&:*>?&k$ÿ&:^:ҿ&:*>=O !& ^#VI"ÿ&ÿ&͈"ÿ&>ÿ&͵"ÿ&#ÿ&T#ÿ&#ÿ&#ÿ& $ÿ&$ÿ&Q$ÿ&d$ÿ&W&]&`&f&o&u&{&&&&&&&!+>6) &)2->:^:&*->My (')2,> ')2+>:+> '*+>M%('͕".>:^:('*.>DM*,>^%:+>&7','!0:6&H'='!0:6! "1:"7::!:'*: ͗8"1:"7:. 9\ -u')29!h ʦ':92h \ ͕6¦'\ =45)2| 29!:6*7:"1:! "9"9^ :_:/2^::!:!_:' ',':e  (.e  -'e >*2!:\ d5I'} /B(}    ͉ͽ"d:`:d:͞8)͹(:v92\ !0>6>!0>گ(h!0>҈(*0>& \ 6 å(:0>=O ! *d:*0>& \ w:0><20>g(!!:6.e  -¼(\ W5/(!!:6 .e  -(\ d5*d:"1>!_:6I'*1>"d:̈́d:8+s#rI(.: -)!:6!:6^ ͽ"d:`:d:͞8)/)*{:DM>fy  ^%y ! ": y  y *d:"4>#*4>"d:!3>6>!3>)h!3>ڶ):3>=O ! *d:Ny û) y :3><23>Œ) *:"::)͸*9"q:̈́d:8+s#r5) !0:4~ (*6*1:#"1:*7:{z*! "1:/ *1:!>~26>xG:6>26>G )x{_ P*#B*>ɯ`i q#zV*COMPRLRSPSPROVLSYM!;>q*5:> :;>w*5:#"5:!3:͹8ڦ*>*3:DM\ ͔5! "5:!<>q:8>!<>28>:7><27>*!7>6 *8>Mq*!8>6 !=>q*=>Mq**A:#"A:!?>p+q*>>}O**>>|O*:: +:o9 +h,*p9"A::\:,+**V:DM**X:":!@>6 ::=!@>q+*@>& : N !: p9͞8j+*@>& : N͍+!@>47+:o9 :o9HҌ+ -!C>q:C> ¢+*X:"D>ó+*C>& :) ^#V"D>D>A:͞8+96D>A:͞8+ *+*C>& f;) N#F͋4*C>& y:) > Ͷ8,:C> ,*X:DM',, ',|9A:͞8&,*A:"|9!G>p+q*F>"H>*C>& y:) F>8+!H>͹8g,*H>DM4O* *H>"H>3,::=O !: N !: !y: 8*p9͗8"A> **A>DM* *:o9, * **p9DM*,*m9DM* * * *:r9,*:DM*, *!J>6>!J> - *!J>4,*p9"A::\:(- ͦ- ͦ-ͦ-!L>6 ::=!L>|-*L>& : ~2K> u-*K>& :) A:͠8e- ͦ-J-:r-.u--!L>4--*p9*A>A:ͮ8ҕ- ͦ-|-:7> ʥ- ͦ-Õ-!O>q*O>Mͧ**A:#"A:M>A:͞8- ͦ-ù-ͦ-*K>& i:) ^#V"u:> u:ͫ8.ͥ*K>& :) 8"M>͹-ͺ"u:-*K>& <) N#F. *0< ~R. *0< DMd5 *0< *0<##N#Fq#p].*0<##q#p2P>:P>ʤ.*K>& :) 8"M>"9:P>O> Ҙ."9͹-2P>c.>5:08> ͔8ʾ.q*å.>*5:DM\ ͔5\ v5:w9Z.. \ ": -.:e /.*o9&  \8_* DMe - /:w9 #/:w92\ \ B5:9 A/. ~9\ -9/! "5:}28>27>*ͥ.:x9Z^/. \ ": -f/.e n* -v/:x9 ʌ/:x92\ \ B5! "5:}2R>ͽ"d:`:d:͞8(0͹/H02DMv0 q*!Q>6h!Q>/:Q>=O ! *d:Nq*:Q><2Q>/:R><2R> 0 q* q*0 q*̈́d:8+s#râ/ q* q*ͥ.!S>q> !S>O0:S>0Oq*Z0:S> AOq*!T>q:T>O60:T>O60!V>p+q*U>|O[0*U>}O[0*9>! =8"W>*W>! =8!Y>s:h 0:Y>2h \ ͕60\ >645*W>! =8!| s2*9͗8"9>. \ ~9 -0:9 1 *9>"9>\ d5͍0C\  ͏5!Z>s*9>! =8C "9*9*|9s#r͍0C *Z>& \8DM\ ͔5:j 2j \ v5:9ҁ1 *|9)8"|9:y9ZŠ1a9 ҟ10ñ1g9 ұ10!_>q. *[> :_>w *[> ~!`>q *[> :`>w *[>  *[> ^#VN#FR* *[> 6 *[>^#V! =8"b>?8!a>s1!a>P2 *[> DMv5*a>M1 *[> DM͕6P2 *[> DML5*b>! =8MͲ1 *[>  *[> ͞8ҍ2 *[>  *[> N#Fq#p *[> ~ڮ2 *[> DMB5 *[> 61 *[> N#F *[>  *[> N#F͔51!e>p+q *[> N#F*d>?8^8*[>q#p*[> *[> 8+*[>##q#p*[> *[> N#F^#V?8 *[> s#r *[> N#F`i"h> *[> N#F `i"j>*h>"f>j>f>͞8ڐ3*f>+ *[> ^#V\8DM2_2 *f>"f>\3 *[> ^#V*j>\8DM2 *[>  *[> ͞8Ҿ31 *[> N#F *[>  *[> N#F͏5!n>s+p+q*[>l>͠84 *[> ~4_2*l>DM2ͦ3Ê4*[>##l>͞8Ҋ4 *[> ~34_2*l>DM2:n>j4 *[>  *[> N#FPY͹8d463g4ͦ3Ê4 *[>  *[> ͞8҇41Ê4ͦ3!p>p+q*o>"[>!s>s+p+q*q>DM3 *[> ^#V"]> *[> N#F*q>?8*]>:s>w *[> 6!u>p+q*t>DM 3 *[> ^#V"]> *[> N#F*t>?8*]>~   +5{>.+55OͲ5w66ͩ6́5;6<566́5͕6<>́5͕6<>645͜6<H66! w #ˆ5> Ö5>2,6""6"$6yo`"&6! "*6͋6-66*&6|6 "&6*"6MD6*$6DM:,6 5ͷ6g666Ͱ66**6|6U6*$645*"6 ""6**6#"*6ú5 6**6 ABORTED$NO SPACE$NO FILE: $CANNOT CLOSE$DISK READ ERROR: $DISK WRITE ERROR$Y Y YP      YP  6 YP YP YP YP YP YP   Ͳ ò !>6 #6 ͐6">*>| $7>9ͫ8"|>## *|> ~ !7!>6D7*>|?7!>66 "|>D7!>6:>Y7!~>6#6#6Å7*|>~2~> *|> ~2>:>z7:>2> *|> ~2>!>6 >!>ڰ7*>& v> ~/*>& : w!>4‹7:72"g:^ *:"|> *g:":*9My *9My *9My *~>My *>My *>My *|>":i`N#Fog_ og_ {ozg_ ogDM! >))덑o|gV8 =D8DM! >))k8 =c8_ {ozg^#V) ~8^#V|g}o ˆ8_ {ozgi`N#Fogo& og_ {_z#W LINK 1.31 $01/04/83?MEMRY$MEMRY  X  MEMORY OVERFLOW, USE [A] SWITCH$INSUFFICIENT MEMORY$OVERLAPPING SEGMENTS$      XXABS $$$  XXPROG $$$  XXDATA $$$  XXCOMM $$$ ::;7;  YYABS $$$  YYPROG $$$  YYDATA $$$  YYCOMM $$$ n;;;; INDEX ERROR$MULTIPLE DEFINITION: $MAIN MODULE ERROR$FIRST COMMON NOT LARGEST$COMMON ERROR$UNRECOGNIZED ITEM $ ( COPYRIGHT (C) 1977 DIGITAL RESEARCH 1 12O02Z0̀%! "K2.> 2.*M0"$/̓%! "":g0i! "P0"R0"2:0v: 0$  :[0 -ʬ+ʬ* :[0!_0M!f0P p  !   :O0Ĝ! ":O0*V0}|<r ͪ*|Ĵ:O0_͑H *V0"Ù*V0"E V» ͪ»**»"Ù*K0"X0!0NA#~' ~p"K0*K0N"X0!0q#*w œ:0!x ͜ *V0*R0:_0̍"V02*M0r ; !:r :0F: 0e%;m ">2:0b: 020 W,F:0b: 0e,ʹ:re*X0#![0~ʇww2/ͬ:2T/-"."$/2/>2.v:.ʸ!/6+͕%>20:.ʮ:.0209$<!5*}Ģ*V0":0y: 0:yv! X ! ^#fkX _~ 0^ Z   2 5 8  :0‰:0=ʉG! 0ʃF#2sÖ*I0| E2V ,[ ͊m *R0"R0"P0 m E2D2V ,ʾ ͊:/ m :/ "> 2/:Į:0 : 0 -Ͳ !/6+:.;?*$/*."$/?"$/:.l*.^#V{r+s5*.^#V ʓ:. r+s!06#wÚ> 209!e/~6 ![0~6 ".~,#!0w9 9*.~6 *: 0,Ĵ2f/*.s#r2[02e/*.#"X0$<5ͬ*$/"M00:T/2:/2[0 v>20*.".2[0v*R0m "R0͍"R0!/w >=G*R0*I0"R0"R0 m :/ }>͞ ¥͢ :O0*V0*ʿ͜">2:O0:0:O0!!4:0: 0,>"4:O0: 2\0:0=: 0 F!Fʹ%*X0"`0>2Z0*X0":0k: 0T!T:\0¦:O0¦:0=ʦ ʦ*"X0 !':[0'Tx»!Z04TT!Z05T:\0! ":]0! **V0":O0*X0~ Ĵ*X06 '>#G*I0! " :0 :Z0 !0N*K0:O0Ÿ"b0+"X0yʛ 'É' Ͳ >ͮ 222:0: 0 !ͮ-:0:0!4 :0& : 0::0!xI !4̨ e ::̮>͞ } !~5:Į ͵ !4̨!~5 G!~Ҩ4_ !p!~ʮ5^ !~> >2\0:0N *K0"+"X0:0 >''!:0N : 0,N :0 >  > !0N#~' ) > ''*K0"V0:\0x ʹ:\0" m }*K0"+"X0''*K0"V0>"4ͬ:2T/:[0 “ 2/-*M0"$/*X0!{#zڿ ~+"X0*M0+"M0wß #"K0*M0". :\0 N ]T s#r+*V0*{_zW".:\02.R     % *I0:/ ͪ% ͬ:O0ĭ%  :.ʢ :0¢ *K0+"X0!2<20*#"" : 00Ĩ!??" 09"K0+"X0$< :0¢ : 0,? ʹ  *} :]0 :O0 :0 ͤ%:e0ĭ%:0 : 0  ͬͧ%vʹ   ͺ :0: 0 !;* _ !5 ^#fkS \ h n 2 ͠ ͻ ͵ ͠ ͖ 8{ Ăy0 2͵ ͖ Gͻ ͋ ͖ 1ͻ ͯ 2ͯ ͖ (Ăy 2͵ ͋ ͖ ͖ Ăy0 ͖ 2ͯ 1 'd  ! ^#V#*0}o|g*  ":D x=D y0P 2!0^4 ! 0q :0Ė: 0,; Ė*I0m |}$† ͌oy Ԍ͋ 8O͖ Ăy01y 1m X:0 : 0, >C͘%:0 : 0 v;:0 : 0 v-!v !v-ʹ {ozg:.7ͮ2Z0!O0~4l!"*|>"V0*""J͊!/6 !/͒%:^0ʏ>2.͡%ͱ*K0*T0&*M0*T0&\ ͍!/w#õH USE FACTOR !/͒%*"P0Þ%z{*P0"R0*"V0 ! ":O0Ģ*R0̜*R0ĜG:O0xě%:/ *R0̍:xz*P0#"P0E2D20:b!^ 4!/wjj*R0!6zz{z4A_A?ɯ2.2*T0"V0!.8w# *V0*K0{zҤ*b0+"X0 =$**X0#Þ!.*V0".#"X0$:d0<:0<! 0~?<#ʐ: 0͡!. ".^#V"V0}{##~2.*.^#V#"."V0*V0}d##~<2.G*V0##"X0:.> u!.~w>w> u:."gxX*gDM$Ͱ"gX*gDM&Ͱ"gX*gDM(Ͱ"gX*gDM*Ͱ"gX*gDM !jp+q>!Ҁ>m !k6 :=!kڹ*k& *i*k& m w!k4!k6 *k& ))) ~ !l6 >!l *l& m *k& ))) *l& !l4:k!k4>>þ>!sq*s& )))  ~2u!  ~2v!6 !6::HHUZ : … :’ :°:u*s& )))  w::u*s& )))  w>!2:2:u2t2t  *s& )))  :w.x*g -*s& " "wE.x*g -=S!{s+p+q>!{_ ! "|!~6:{!~ڵ*y~0*y>9Hҏ !|ͧ*y~0_ "|*y#"y:~<2~j>!| *|}!q*& !d ͈!s^ !d Ͳ:!s^ ! ͈!sn& ͫ:!s> !":0OH> !> #H?:0OH:0OH!6!6 ::HhZ : … ::ʝ hZ :}+DM*I=2*:: hZ :}+DM*I=2*S͘2e͘2f X:e!g:"O !C ^#VXUU$XUU/XUU:XUUEXU "+.7:*MͰ"*DM    :2: :Hқ*MS:::H:H: HI : !6!6 UZ :O ! ~2:J:- G:"= G*M !6 #6 >!p*& m 6 :<2R:/:}+DMn2:— *& m 6:±*M#: :H:*}~ HH!6:*}~,H*}#"}:/UZ p: :Hd*& )))  >\" $ a ::Hҩ*& )))  >¡& ( æ :":&H*& )))  > *M *& )))  >  *M !q*& )))  ~2*& )))  ~2 PX*M? cX*Mq vX!6 >!:2¸*& ͫ DMX !6 >!ڵ H:<2:X !6 >! H:<2:<2m   !p+q: :H!6$!6 *DMn2:< :J*M:\*M#a !6!6 : €!"b"}Ï! "}+"b+~2dZ : :H:H!6!6 : :H:}+DMS@::S @:7:/4 @sS!p+q*~ *~ Hk*#"G*~ w> >_ ogDM! >))덑o|gҡ =^#V))) DM! >)) =¹_ og^#V) _ {ozgo& og_ {_z#W ~ F  GET :<***.n6.t6 LL! p:~y !6  <ʊ~"x!F#fh!:~!«!>w~:!5*.~w: ; :~! 9"1W:.~ !! _ ^! ^#V~ x+ >= = !~  . !    #x f L L ͓ͅ ҆ *" ! 6 ï +"_*~ #E گ ʫ ^#V. ï ~ CZMEIABDHSP! "M"+"! 91*~!O~6 =G#^#V#~x (#"!N#FW( *J>7Å*M|N+"M N:LHͅÅD Å >* *͓ b" . *"] !/~##ʁtZ *F#n!Is!^#V&&##&))::^#V#*^#V>+)x-8_è COPYRIGHT (C) 1980 DIGITAL RESEARCH @: 5@% 15252'5h+U"! ""*"5j"2u3> 2v3*5"3-ͩ-:5Z! ""$"5"5"5"5"5" " 522>2 5:4 b:4$M:(5 -C+C*M:(5!,5M[!35PMp%M(ʡͣ#v#ƒ $:5}% }! "&:5ʦ>%*#5}| V AX*|:5(# $*#5"A*#5"&#v#% RØV AR*&*R"A*5"%5!4NA#~ͫ% p"5*5N"%5!4q#͢%w 3:4(x *#5:,5o"#5V%2*5Ô; !:V :4:4{%͉"">2!:4:424*o,kÊo:4:4{,ʊ:k*%5#!(5~́ w23@:2(4y""3"323>2v3 :u3L!P46+(0>24:u3:v3"U24͋$͇%ͩ$!5*}*#5":4:4: =X !^#fk:Vj&AW y ~   8 ; C :4:4=G!4F#I ,*5͘EIr,o͉n2"5~2 r,Yo :K4 ͉:K4 " : 52> 2K4::4M:4 Mg %U!P46+:v3Ϳ$ý*3*3"3Ϳ$"3½:v3*3^#V{ʽr+s*3^#V ʽ-:v3:r+s!46#w4> 24͋$í!94~6 !(5~6 "3~,_#!4w͋$ÏV *3o6 ͋$*3~6 Þ*3:4,"3~ š6 2:4*3s#r2(5294*3#"%5͇%ͩ$@*3"5":(42:32(5Ģ >24*3"32(5 ͉r!Q4wM>=n2*5~2%! 5%~2͉:K4 v }>v S M:5p*#5*gu>%"u> %2 :5O%:4©:5[%! 4:4©:4,ʀ>:5: O%% 2)5:4:4 !*%5"-5>2'5*%5"&:4:4(:)5N:5N:4=N N*&"%52)ͫ%:(5ī%x;c!'54!'55:)5ž! ":*5ʍ! 5%Ù*5%*#5":5*%5~ *%56 ͫ%<͉:K4 "5~2o M%(>@%>#*55%! ".!/5",:4M:'5M*,~#T :5T !4N*5*,s#r+"%5yP  ͫ%> ͫ%%g >v % 222:4¦ :4 – ì !ʬ ¦ À :4:4€ ( :4 :4:€ :4€ (€ € x !4À  :€ :>S %2 !~5€ :%j B !4À € !~5€ úG!~4_ !p!~5^ !~>À >2)5:4 *5" +"%5:4ڥ >ͫ%ͫ%[%:4 :4, V :4  + !4N#~ͫ% > ͫ%ͫ%*5"#5:)5- :)5%͉}*5" +"%5ͫ%ͫ%*5"#5>@:2(4:(5 H 23y"*5"3*%5! {#zt ~+"%5*5+"5wT #"5*5"3:)5ʑ N ]T s#r+*#5* {_zW"3:)52v3 > > >2 5n2"5 %: 5*#5* 5"#5*55%"#5:5KBn2: 5O0!*", ++ *5:K4 0@:5Ĩ/ú>2) :u3ʭ :4­ *5+"%5[%2!<24*$#"$""*:40!??"4͋$"5+"%5͇%ͩ$+:4­ :4,J "*} :*5 :5%:4 +:25Ĩ/:4 :4  @S+ >2):4„ ͣ#v#: :5 $:)%k %G I k :)%:)c %k %+:4„ :4, " :4 :4/ :4 :5 $*#5^#V*S"s#r*5*#5s#r+"5 |#v#*#5" 5:4 :4/ ! "5:5> %AB,#*#5 :4:4 !;*M_ !Q^#fkox Iͻ8ʗy0IͻGͰͻHIͻ(yIͰͻͻy0ͻIH'd  ! ^#V#*"0}o|gF 9"":!`x=`y0l2!!4^4 !4q/:4:4,; *5͉: 5ª|}$ªo͕Ͱ8Oͻy0H͕H͉: 5në:4:4,>C0:4M:4  ;C:4#:4 ! #! #{ozgBB**}j!]  ~ } #ymy>2(>2v3͖*5|EB"#5>% 0,# ^#VÕJB *50MB*50! ".*5} "#5^#V"5*.s#r+".*."5:u32'5!5~4P!"*|"#5>%*5%"".o!P46 !L4*>2(>2v3͖>2(>2v3͖NB:O* 0:+5ʘ0*5*!5S*5*!5S\ gr!P4w#þH USE FACTOR !M4** "5A1z{*5~2*"#5v#! ":5(%! 5%n25%%%>%n2G:5x:L4 o:x_*5#"5:5ʽ*5|ʉIB 0>%%O%O: 5%*55%ý:5ʽ: 5O*5*5ESS ͎2O=>O͎2N=#y{#* 5* 5 "#5" 5͎21͎2=HÎ2Î20:G!^ 4!K4wOOn2!6z_{_4A_A?*!5"#5*#5*5{z*/5+"%5**+"%5% V%=͇%͢%*%5#þ!v3ʲ:( O! ^#V4@B%GFB>%%O0*#5##~<##ò*#5"|3#"%5͇%:15^:4^!4~?^#ʲ:4͆!~3 "z3^#V"#5}ʝ##~2v32w322(!~38w# ͖!~3"z3>2y3*z3^#V#"z3"#5*#5}ʩ##~<2x3G*#5###"%5:w37> ͺ!w3~w7>w> ͺ:w3Pd!5^ !K4~ B!~6 24(02w3%! >%|_}_> ͺ!w3~w:x3ʜ=͢%ͺ!w34È*#5^#V"#5!y35:24(0!^ 4!K4w>R0>V0>D>P>L>O>B>S>N0 !u~ڇK6 N4 !E s#r!U :mw* 5!] s#r!t~ ڹ6 K^ 4!1w!;p!u~K! 5N !E ~#fo!U ~2n!] ^#V"p K2oo& ) ^#fkN]ivKzV{K>ɯo> g"!6 ů{_zW5> )D*OxGғ !?u DM! xGyOڱò)â͝ddJ)=J|g}o=2o2o*p"rOxKxGyKxGy0KG*p*r}|K\\z{W¢Ü}|ڜâWʜllyWœâ!! #Qzg{ozg{ozg{ol& :oO:n2m*p" 52n2ox:4:4 ;!,ɯ2t2u2 52o=20! "5" 52m{!t~Q5_ !1~9:uK:K4 *E"5:U2 5*]" 5*v"#5:K4 $:4§:4KK !4^#=ʣV²*4(—ҌV :4:4V ! !*/O:0K>20y_j:t:_ !;~:!ts!1~y_!t~X=w_ !1~[Kdͪ>20$y$zU0! %2m*#5"v:mP>U0%4>%:m! >2m*202m! " 5/:0Kx*#5DM*5" 5}|^#V<>E0 :u3ʛ*3~Œ:v3ʁ!\4> A!(0":3]#"3,ž"3Þ-2\  :4x_ <24!K4w:94͜:94ɯ2:4284]294:4:94K)2:4;4~#!͜,!:4~*4!;4_ :94w]294ɯ<*#5"W͉#4#*W"#5ɯ2[![4Y5!!:46 "3!:4~q5!84^4 !;4~â:u3:94†G³]âʻ^¨^·:94&·!:44#wó&G294xâG:94&:4G/G&ʷ/&ʷG/G!94~&>6 23y"!v36*5"3$"32:4*W"#5GJ2:42942(524> 2S(0>24ɯ242T!4~@`6 5!^ 4#:(5O:4yD(w~$w:(50 |:(5D(A:(5?ʱ@ʱD(Aɷ͙| ;!Cͻ2(5:'5:)5:5:(5ͫ%:(5 !J24:(5 ʞ;{>24:'5ʋ:)5.:5‹;Ž*-5*%5++{Iz]~ T++]!]+?"%5:'52'5hͫ%2'5ä:(5*—:S —ʤË ¤24͙ʳ>|ʾ>:(5'2(5> :u3>+2P4(0!K46 >24>24:(52SR:4Z:'5:4=!EQM<8!LE:(5=I!NE>I!LTM>!GT:(5=M!GE2(5"4!44>24!(5:4ruͳ u͇:(5D(OʓQ˜>ßH©>2T2(5:SD(B¹>D> !452T! "4!4N#~#A07O!T/! ~*4!  ) "4 :(5 5!'':(5 :(5,;%:(5 !:(5; ,J242Z$ l ` / ‰ >24#!:(52S:4; ¡ :4/!:Z/!)!:4 :(5'#!R:(5'z 24É :(5' >24#!^ :(5 #! #!;!)!<!!Z~4z . "y2; ! "(:2(=2(:=; ! ~; 4#. {2(! " "9"2!;(y3] K! o \b!,_ ^#V* !J ^#V̀:#!"( COPYRIGHT (C) 1982, DIGITAL RESEARCH 151282/(  + 1 7 = }!!!!"""""# ####$$$$#$-$A$J$S$@Y$u u J$u u }$$$$$*%P%$%&'('d'''(('({ A g X J v !)$*^#V#^#Vw# l l l ls:¬MA wM  2*7w#6?#7 .,:;[]=<>| !?]45#Ra{i_p# l s s͂:(A2= / ::0! dگ61#d ڸïp#:w#6 !6 :6 *#!)6.#)͂ O(BDOS Function = File = !,$-"h ! 9"f! ͉:2(t™:! =Hgo :O*; * Ó*"r*r"ÿ<:g:!͐*f}D! ~6 t!r ͷO(^  : šn!6@G:x: P:<: P n6  t6 ! ^6 t6 u:)<͠^! G:Ҏ>xʝʝw>ɯw̩z:»!>wɯ:=zxzz: :G:=/ͽx:Āy!4 5~y 5 6 y(^@O:=7:y :I :=e:  zz#͂:!  r  ! O(Ì*( ~2* *}ʷ!#¶! ""÷:_:*( #wxH! )6 "& :!  x2 GH)+6 :2, :!-  :, !+*(  ~L#Bxz:* : *( ~ʓOڊ{2Ó#w:2. +:. 2- !% "( 2* ! "& !* ~4:2- Ԃ: G ͳͨ^2+ >2:2 *N#G2  :+ ̜2 5*( ~o#"( M š*( ~`Uoj*( ~#"( Ñ!* ~6 s!+ 6 :+ ‚xoͳ*& ~2+ o#"& !+ 6M : W:2 x ͺ*( +"( w  : >2* 2 :*( : +w"( ͺ:G:  !% "( ^-:* $P:<\: W:2 xM s:<9>2 :* 9x~+q ’x2 :* ͂^2 ¢ů͠: !ڽ*( ~5WèjM 2 ͨx*( +w"( j>2+ 2* jx. #NzW:  : !2 W! 5= ^x^ z: m :* ;#wO: 9ʌ ^:— ~x  ) :* :   >*( +"( w++2+ 2+ p! " r y< < <% zr ͷr 6r 9r MDÌ:o !6!h : ʚnt2 r 6 2 >r z<*)$"!z<~r s^#V#N#FxN:oʲ ̀õ (# Þ CP/M Error On : Disk I/O Invalid Drive Read/Only File Read/Only Disk Password Error File Exists ? in Filename ò ò >2(a." :(2:<:5(5(;(:(2ɯ2(2{_zW{_zW ) 74#4#4)7( #  w#*J|^#V#"i(##"k(##"m(###"o(#"q(##"(!s( )*s(!()*(|!(6~6 7*k(w#w*m(w#w#w>2('å2(*OͶyڲ ò <* .Ͳ:0!(:(:(ò 2*(>*ͫ"(1 Ê CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321 Press RETURN to Continue $ ERROR: Not typed: $Password: $No File$ BDOS Bad Sector$ Invalid Drive$Currently Opened$Password Error$ERROR: $Invalid or missing delimiter(s) $Try 'PAGE' or 'NO PAGE' $Requires CP/M 3.0$Enter file: $ $ERROR: Invalid file name. $1 1 u" * }0* |HҴJ>O /4\>( N2 i>! 6 * &  6 ! 6: , v! 6 >  W ʹ * ~ ‘ù* ~[ʟ * #" * ~N* #" * ~O* ~ H* #" ! 6 * ~P! 6 * #" * ~]* ~ H$ù* ~A0×* #" * ~]* ~ HTù* ~G`×* #" * ~]* ~ H҄ù* ~Eʐ×* #" * ~]* ~ Hҹ: : /2 : ==2 : ! 6! 6 \ O2 : P'!5^ !/~ !~6 20͕%2.|z}z> u!.~w:.W=*u!.4C*V0^#V"V0ý!.5¯:20͕%!^ 4!/w>R͘%>V͘%>Dý>Pý>Lý>Oý>Bý>Sý>N͘% *6 ".~ 6  - !2~B6 ~44O !! s#r!1~ _6 ^ 4! w!p!2~~! 55N !! N#fiooo& )^#fk9BIO[ov ͌z{>ɯo> g͌"!6 ů{_zW5> )D*OxG !? DM! xGyO23)#͌)=R|g}o=^͌͌roz{͉͌͌}|͉͌Þ͌Þ͌ë͉͌!! o#Ã͌zg{o͌zg{o͌zg{oolo& 3:0: 0 ;!,ɯ2122=2 ! "I0&q!1~\5_ ! ~͔D:2:/ *!"I0:/ :0:0 ! 0^#=ʙV¨*0!҂ :0:0& ! !>O: >2 yU`:10_ !~0!1s! ~͔ yU!1~N=w_ ! ~QZP>2 ypP͘% >U̘%>: 2 3>E͘% óf :.O*.~H:.=!4> ͕%0:/#". ͆%2G:0xa{_ ʇ ʇ:0x҇_ <20!/w:e/S:e/9ɯ2f/2d/2e/:0:e/ !2f/g/~#»S͉!f/~4!g/_ :e/w2e/ɯ<*V0"36*"V0ɯ2!4!f/6 ".!f/~55!d/^4 !g/~f:.:e/JGwf^l͗^{:e/&{!f/4#ww&ʞGʱ2e/xf͗ :e/&ʕ:0  ý͗&{&{ý͗  !e/~&>6 2/-!.6*M0"$/B".2f/*"V0͗ 2f/2e/2[020> 2͕%>20ɯ202!0~@$6 ^ 4#:[0w~$w:[00 6:[0A:[0?e@eAɷP6 o2[0:Z0ʦ:\0 :O0¦:[0':[0 !20:[0 R;/>20:Z0?:\0:O0?́;B*`0*X0++{z~ ++!+"X0:Z02Z0́ͪ'2Z0X:[0*K: ḰͪX? X́ö20Pg>ã6r>ã:[0'ƒ2[0>ã ¡:.ʔ>+2/͕%!/6 >20>20:[02́:0:Z0: 0=!EQ<!LT:[0=!LE>!GT:[0=!GE2[0" 0!04>20![0:0/ʦg¦´/ʦA¦:[0O<QA>HHR>22[0m:B_>fD> j!052! "0!0N#~#A҄0Æ7O! ~*0! ʩң)Ú "0 x:[0 '¦́'æ:[0 :[0,;%:[0 !:[0; ,202́/>20:[02́:0G:0::0l:[0'́:[0' 20/:[0'|>20^—́:[0  <¨!~4 >¼!~5 : >20>V>O>I>B͘% !QéÉ $ ? H Y ` e Ò ü ò ~ÏGÇåûfD?<==: e> ?; > <>; ;< = R>>> F>; >G= =<= =>= s;=P= *>=$?P:-?]>*<< == <; =>>y> ;: =;>? >P? <=?>>= << i; m=> c==>o>v<=<;8?N!Nw#w#W! "V0!.w#w#l2N!.~4^ !.~w!.ͼ!.ͼ!.ͼ!/~w!$/ͼ!D/~w!T/~wN#Fp+q!.~^ !.!. !. !. !/!$/ !D/!T/5~wN#Fq#p>BØ%!0" * F#%2NG*V0##~w*V0##~<͉ :.t!.N !. yq~t +aG=#w#wY*M0!0n& {ozg"V0!K0{#z"M0 b*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#Ž&!\ 6 0 ڱ&>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.-> ͕*> ͕*͞*> ͞*wsÀ CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH251082 654321! 9"k1G \ !m!w# š!v6H#6E#6X!e 6C#6O#6M <  <&: g. ".g"?S:2n!`w #4o"c*e{ozg"hj:]@*c"\y!5C*^N{zb+"^*^*`*h"!j4&"h"y:b <5  *kG!gwxS0  *cN,*cN{zҽ{,*c*e{ozg ~*c#"c> :[ >   X N*c>:> !: q#G*eDM*h ERROR: $DISK READ$LOAD ADDRESS LESS THAN 100$DISK WRITE$LOAD ADDRESS $ERROR ADDRESS $INVALID HEX DIGIT$CHECKSUM ERROR $FIRST ADDRESS $LAST ADDRESS $BYTES READ $RECORDS WRITTEN $CANNOT OPEN SOURCE FILE$DIRECTORY FULL$CANNOT CLOSE FILE$HEXCOM VERS: 3.00 $   vers equ '0e' ; March 18, 2017 19:52 drm "LDCPM3.ASM" maclib Z80 cpm equ 0 bdos equ 5 tbuff equ 80h msgout equ 9 reset equ 13 openf equ 15 read equ 20 sdma equ 26 lf equ 10 cr equ 13 org 100h LOADER: lxi sp,stack ; ROM 81-292 uses 0fd74h ; U-ROM 81-478 uses 0fe9ah ; ROM 81-302 uses 0fd5ch ; ROM 81-326 uses 0f800h ; Identify ROM by... ; we can't map ROM in, we are in low memory. ; can't call ROM, either. ; U-ROM places '2.01' in 0fff8h... ; 81-292 places copyout in 0fde5h (DB 14 CB BF D3 14 ED B0 DB 14 CB FF D3 14 C9) ; 81-302 places copyout in 0f919h (DB 14 CB BF D3 14 ED B0 DB 14 CB FF D3 14 C9) ; 81-326 places copyout in 0f822h (DB 14 CB BF D3 14 ED B0 DB 14 CB FF D3 14 C9) call chkuni jz rom20 lxi h,0f822h call chksig jz rom17 lxi h,0f919h call chksig jz rom19 lxi h,0fde5h call chksig jz romXX lxi d,badrom mvi c,msgout call bdos jmp cpm gotrom: lxi d,rommsg mvi c,msgout call bdos mvi c,reset call bdos MVI C,openf LXI D,cpm3$sys CALL bdos CPI 255 LXI D,nofile JZ errmsg LXI D,tbuff CALL dmaset CALL readfile LXI H,tbuff LXI D,topres lxi b,6 ldir CALL readfile MVI C,msgout LXI D,tbuff CALL bdos LDA reslen MOV d,A ; LDA topres mvi e,0 lxi h,buffer dad d shld resend xchg call loadf LDA bnklen ORA A JZ nobnk MOV d,A ; LDA topbnk mvi e,0 lhld resend dad d shld bnkend xchg CALL loadf nobnk: di ; ***** this should be part of COLD BOOT in CPM3LDRK lhld romcrt lxi d,00040h lxi b,16 ldir lda romid stax d ; 0050h: ROM identifer char inx d lda fpytyp stax d ; 0051h: floppy drive type (all same) inx d lda fpysel stax d ; 0052h: floppy drive select mask ; ***** lda reslen mov b,a ;B=reslen mvi c,0 lhld resend dcx h lda topres mov d,a mvi e,0 dcx d lddr lda bnklen ora a jz nobnk0 mov b,a mvi c,0 lhld bnkend dcx h lda topbnk mov d,a mvi e,0 dcx d lddr nobnk0: ; Before running OS, patch logical-physical drive table. call setlpd ; lhld cstart pchl loadf: ;ORA A ;DE = top address (max+1) ;MOV D,A ;MVI E,0 MOV A,H RAL MOV H,A read0: XCHG LXI B,-128 DAD B XCHG PUSH D PUSH H CALL dmaset CALL readfile POP H POP D DCR H JNZ read0 RET dmaset: MVI C,sdma CALL bdos RET readfile: MVI C,read LXI D,cpm3$sys CALL bdos ORA A LXI D,rderr RZ errmsg: MVI C,msgout CALL bdos jmp cpm chkuni: lxi h,0fff8h mov a,m inx h cpi '2' rnz mov a,m inx h cpi '.' rnz mov a,m inx h cpi '0' rnz mov a,m inx h cpi '1' ret ; HL = prospective location chksig: lxi d,signature mvi b,siglen chk0: ldax d cmp m rnz inx h inx d djnz chk0 xra a ret rom20: lxi h,0fe9ah shld romcrt mvi a,'U' sta romid mvi b,3 ; start out assuming floppy-only lda 0fff7h cpi 0ffh ; floppy-only lxi h,lpdfpy ; floppy only lda 0fff4h ; drive A jrz romZZ$ff mvi b,1 ; floppy/win, must not touch DS2 (WD1002 RESET) ani 00001100b lxi h,lpdwin1 ; floppy, win [,win] jrnz romZZ$ff ; win, [win,] floppy lxi h,lpdwin0 ; win, [win,] floppy lda 0fff6h ; drive C (floppy) romZZ$ff: rrc rrc ani 00000011b xri 00000011b ; 0=error, 1=ST, 2=QT sta fpytyp mov a,b sta fpysel romZZ$1: shld lptbl jmp gotrom rom17: ; 81-326, version 1.7R lxi h,0f800h shld romcrt lda 0f881h ; 02 = QT, 01 = ST sta fpytyp mvi a,'2' ; correct? jr romXX$0 ; floppy-only rom19: ; 81-302c, 81-277, 81-188, version series 1.9 lxi h,0fd5ch shld romcrt mvi a,'3' sta romid ; All floppies are ST... mvi a,1 sta fpytyp sta fpysel ; get floppy/win determinination ; 0f700h: cur dsk type, 0=win, (ff) floppy ; 0f701h: drive A type... ; 0f702h: cur SPT? lda 0f701h ora a lxi h,lpdwin1 ; floppy, win [,win] jrnz romZZ$1 lxi h,lpdwin0 ; win, [win,] floppy jr romZZ$1 romXX: ; 81-292a, no visible version - floppy-only lxi h,0fd74h shld romcrt ; All floppies are ST... mvi a,1 sta fpytyp mvi a,'2' romXX$0: sta romid mvi a,3 sta fpysel lxi h,lpdfpy ; floppy only jr romZZ$1 setlpd: ; locate lptbl... update it lhld cstart ; assume this is BIOS base lxi d,100 ; offset to logical-physical drive table dad d mov e,m inx h mov d,m lhld lptbl mov a,h ora l rz lxi b,3 ; TODO: allow more drives? ldir ret cpm3$sys: DB 0,'CPM3 SYS',0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0 topres: db 0 reslen: db 0 topbnk: db 0 bnklen: db 0 cstart: dw 0 resend: dw 0 bnkend: dw 0 ; This code is located in high RAM for certain ROM versions signature: in 014h res 7,a out 014h ldir in 014h setb 7,a out 014h ret siglen equ $-signature badrom: db 7,'Unknown ROM version!',cr,lf,'$' rommsg: db 'LDCPM3 vers 3.10' dw vers db ' - Got ROM id ' romid: db '.',cr,lf,'$' romcrt: dw 0 lptbl: dw 0 fpytyp: db 0 ; 1=ST, 2=QT, else error (no floppy?) fpysel: db 0 ; available floppy select bits, 01 or 03... lpdwin0 . \ - v  ! q* &    ! p+q*   ! s+p+q* : w#6 *   * #" N#Fy      ! p+q*  ! p+q*  ! p+q*  ! p+q*  ! q* & -    ! p+q*    ! q: 2 ! 6  1 ! q: 2 ! 6  1 ! r+s+q: 2 ! 6* #s#r 1  m  % %!% s+q+p+q:% =2% ʍ*" :$ w*" #"" p52& aڧ:& {ҧ:& :& XX>l  c!' 6 >!' 6͎2( *' & l :( w:( 6:( ÷:( $:' ÷:' =2' O !l 6 :( /!' 4~2( !) q:) R>:) c>:) t>:) ‚>:) >!+ p+q** ~ ʯ** >@O%:%!, 6> !, :, .%*, & ** >2- *- M%!, 4´!. q>:. >:. 1>!0 p+q*/ ~ ~ H?*/ #"/ */ ~ K> >!2 p+q!3 6 #6 :3 ҁ*1 ~?s!4 6!3 4*1 #"1 ]:4 : : <2 ! >52  %: ·: ! 6! 6l ͷ: 2 ! 6  ͇" * }= * |2 % ͫXl ͷ: 2   ͇" = > ͑ %* M=* }   ͷ! 6 ! 6 : / ͧ H ! 6 >! * &  ~2 — ! 6:  ~Ү 52 : : ͅ* M%! 4w [  = ͷ\ 26  =:6 :6 o&  "7 E"9 G"; I"=  "? "A "C .*7 DM -J :\ 2 ͅX ͑:%ͅX ͷ*9 E)*; G)*= I)*?  )*A )*C )!; \ e .*; \ - 26 * ~ * ~ H * #" ! `i^#V#~#fo:  y  wO G:L xAڠ Ҡ a{3 _à  F F : i`N#Fogo& og_ {_z#W ɀ 3 PUT 1$ CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321WARNING: $OUTPUT~TO~FILE~CONSOLE~CONOUT:~AUXILIARY~AUXOUT:~END~CON:~AUX:~LIST~LST:~PRINTER~INPUT  )15:?DIQVNOT~ECHO~RAW~FILTERED~SYSTEM~PROGRAM  $ []=, ./; Error at the '^': $Error at end of line: $Invalid option or modifier$End of line expected$Invalid file specification$Invalid command$Invalid delimiter$File is Read Only$ (Y/N)? $PUT aborted$Enter Password: $Putting $list$console$ input to $ output to $file: $ Do you want another file$File already exists; Delete it$PUT completed for $printer$console$Requires CP/M 3.0$CP/M 3 PUT Version 3.0 $Put console output to a file$ Enter file: $1$1$n}0n|H 7    /ң777 G2*͵ ! 6 **&  6  /[   !&6:*!&ڋ*&&  N *&&  w:&<2&`! "':*2)". ͉!&6*&&  ~ :&<2&è! "'+~2)*&& ".!06 !260Z:0:0H:0 Hғ!860Z:090Z:0N0Z:0a*.DM͉Ð:0:0H:0 Hҋ)Ð :0 :0 H:0 H@!86#6 !,6+60Z:00Z:00Z:0*.DM͉:0 :0 H:0 H8)= :0:0H:0 H:2 r)0Z:0—0Zÿ:0¿!86#6#6 !,6+60Z:00Z:0*.DM͉:0:0H:0 H) v  !Hq*H&    !Jp+q*I  !Ms+p+q*K:Mw#6 *K  *K#"KN#Fy      !Op+q*N !Qp+q*P !Sp+q*R !Tq*T& - !Uq:U24!56 41 !Ws+q:V24!56*W& "641 !Yp+q*X< m ![p+q*Zm !\q!]6*]&  >> *]&  :\R:]!]4,!cr+s+p+q+p+q:2 t͙ !j6 *b~ *b~2j*gM#22!n6:2  :nڳ*gM#22Þ :d21= :d212m*b~2k!n6 *b~2j *b~ Y *bN ! *`*` =2l!mM !n6!e6:m!eJ :nC !e4, P *b6 = *b:kw:1.r+s#r͙ :2 ʃ *.#".È !26:j2oO *` ~2f*f& *^: !o4*b:ow*f& *^:g *o& *`~2fÚ *b6 *.~2g͉ :f2h!d6*.#~2g!h4N *^ :3 !n6 - *h& *^:g- !n6 !d4N *. ~2g*d& *.~2g*gM#22:2> !2H҆ !d4N *. ~2g*gM#22U :d21.r#+s#r*.N#22!)´ *.#".Ù   !ss+q+p+q:s=2s *p:rw*p#"p !tq!}6 *'"y"{2%:%( !%6(*)& *%& !ws*)& ́!xs:ts :t:tH\ *.+".s :ts :1.͵++s#r͵ !u6:w!uڙ *y"{*%M !u4{ *xM :}Ұ *7ö =7:%A ͵ *tM ! ^#VT7 o7 7 7 7 7    !~q!v6:~!vD *yN*y#"y!v4% ͵ !v6:~!vڃ *{.͸p !}6^u  *{#"{!v4L ͵ !p+q*DM772͵ :y:YH 7   !q:a :{ : :.O 2:͵ ͵ 7@ !6 >!څ 2 4 *& @ :w: = :H  :n :[  :=2O !@ 6  :~    !4 7:8 7ã 7:8´ 7ú 7!p+q0 ͵ &7*~ *~@O:!6> !,: .*& *~ %*& *N!4 ,">͵r*++"~[+"r7͆ *DMͻ -͇ Ͱ@͠:@ ʍ:b 2b \ ͐"*}*|27H͇ \ ̀"*}*|2 : ͵  Ͱ\ ̀" Ͱ:@ :b 2b \ ͐" Ͱ͆ \ ͻ 8̈́:2 :2HF ,">͞u+"g7*DMͻ ͵ F͆ :8‰z7Ï7   :2:2 H҈!6 0Z:0!60Z:0 :0H :0:!96 !96:01:,!:61!:6 :0M:H!:6 M!:6:0i:d!;6i!;6 :0…:Ҁ!;6 Å!;6Ø!p+q*"<!\ "><7"ͭ¼*<". .@l -> ͵-*#".*~[ ͘-!p+q*~ *~ H'*#"*~ 3> >! `i^#V#~#fot2XywÉG:†xAa{m_ ʀ ʀt`i~•2F2G#~2H#~2I#~2N* | !\ ~= w4_ P 12O'"& ###~2M:G 9!!<1>27>2"> 2#!H:FH!I1>27>t2">2#2H*&.~@!"J<V <W ^#V###*#* ~~*&.~‡>28í.h"5~ʗ>286!:"o".~>286!N#F*#* #",^q#Vp"*#N#F* #"3^q#Vp"14!&L 1   \  \  :8«X  !86>_  1/ : ~# y1p   %co %c WARNING: Cannot redirect from BIOS $ ERROR: Auxiliary device redirection not implemented $ ERROR: Insufficient Memory $ ERROR: You cannot PUT INPUT to a file when using GET or SUBMIT. $z K     %co  SYSOUT $$$ _ ogDM! >))덑o|gҘ =†_ {ozgi`N#Fogo& og ~  4  PUT :ʜ4Y:O>52:[y<jbj%j:!F#fh! ~}#$ 151282 COPYR '82 DRI gggggggggggggggggggggggggggggggg BD$H$$I! D $DA HH$ @ H!@  D! A ( ( ~:2>2:<** "_?:<2>!/:<}:2*  ~b W6 y2>  # vwm>2>!*"#"":""9!+"O#!N#6:"!N#A*O#Ny *O##"O#!N#4"!"6!"6 !"6 :" Z!:"e!:"p:ͳ2" „"!:":"#H!:":"=o& )))A ~ھ+:"=o& )))A  ~ lNͳ2" 4:"=o& )))A *"& ~=*"""!"6#6 !Q#6 :" =*"N{2"*"#""!Q#4!:"X*"N{2"*"#""!Q#5> :"=Œ*""":Q#2"O>҉e͟!"6:"= ¶*""":Q#2"O> ҳ!"6 ͟*""":Q#2"O>͟!"6:" :"=o& )))A ~HF:"=O !" 6> !":"=:"=O !" HqQ͟X͟X͟O!͟OG͟X/  ^:  Q:"s ":"ҁ":"ҏ":"ҝ":"ҫ":"ҵ͝:"ҿ?:"͇:":"!":"!":"͟͟ P:"):"!"6 4 @4:"P:"F!"6  @44:"!"t:"h͟͟ Ø:"҅ "Ø:"Ҙ!"6 ":"ҩ 4:"!";͟  :":"!"6  " ͓ :" :" !"6   "#!>!!Z~#!5z #!:Z#!G )!Rz >24>VG!>OG!>IG!>BG!0 !P!w#w#["! "#5!U3w#w#p"!u3~#4^ !v3~w!3ͷ"!3ͷ"!3ͷ"!3~w!3ͷ"!4~w!(4~wN#Fp+q!u3~#^ !v3"!3#!3#!3#!3"!3#!4"!(4"5~wN#Fq#p>B0!4"%*%F# #2P"*#5##~G=#w#6 #w]$*5!4n& {ozg"#5!5{#z$"5 f$*5!4N#yʦ$ ~Ù$ f$!U3"Q"/$:P"%*5!3{#z"#5%_ !U3*#5~#~&%~#$"5ÿ$&%! %*A1SYMBOL TABLE OVERFLOW *#5###w*#5###~,#*#5_ ####&%s#r&%^#V&%##"%5F%wF%~#!4~l%6~=ͫ%ͫ%!4N#~ͫ% y%͢%͢%2P"*ÿ*:?*ÿ*:@*ÿ*~x/~# *> x/\  ?-$-w# +!\ 6 4 #+>GO#w %+>O # <+6 2+6L#6I#6B#w2| *\ +>2*5! "B*!(5~2A*w͹*!1*>826*27*! "/5* "5!5"h* "* "* #"5"!5\, _ #~ͨ+ ¶+:;*Aͨ+>:ͨ+Ͷ+>.ͨ+Ͷ+>-ͨ+* !1+  !32*   !1+ :=* D,> D,:D*6,_ !D* W,6 4ɯ2D*2*522521528*:\ - 2;*2@*O:\ ʋ,=Ì,y!<*w#w#w#w#>2+52,5:m $>-! ~#$ª,~>-# ʱ,<*A-P-S-R-L-*,+, -,-+5~S-M-25L-15Q-8*1,-x#ñ,~A,-#ñ,#6 !1*! * !E**e  !N* +-!j**%,r-6 * ,,:=*ʂ-:>*…-2:?*ʨ-!***ѯ2:*29* ,,!3*60#60#60#>235! "*:5ͨ/-! "f*2Q*2e**E*+!1* z{:*5G.*B* -.! "B**\  ..*B*#"B*+ ~¤.:u32*5G.*\ !F2+ *f* -•.*! "f**h*ʹ*E*  €.a.Ò.Ҫ.ʒ.6# ‹.͹**h**f*#"f*~!2* G:=*..xx/.x.1,..****w#"*! -*! "***j*!*-/~5/ʹ*  9//͹*!2*1L/****w#"*! -*! "****/_ !5*~ ͳ.27**/5}!1~ /ͳ.#/> ͳ.>#ͳ.ͅ/> ͳ.*/5~/ͳ.#/> ͳ.> ͳ.> ó.}26*!7*è/Oͳ.:K4 :5:=*yx/:8*!5I0:25!*5—0~0:K4 0!K4~ —0:350:P4+—0:,50ʗ0:Q4#0:L4 0:,5=ʗ0 !K4~ ʇ0!4s!7*~!6*Ԩ/4:4!K4ʺ0G~ 0#x=ë0> 0> 024!K4>x6 #=0G!K4~ p%,**}0>ͳ.0*j*+:+51} CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321 Copyright (c) 1982, Digital Research 10/27/82Show 3.1ERROR: INPUT: OPTION: DRIVE: Unrecognized Option. Unrecognized drive. Requires CP/M 3 or higher. No directory label exists on drive Unrecognized input.  A:0B:0C:0D:0E:0F:0G:0H:0I:0J:0K:0L:0M:0N:0O:0P:SPACE0DIRECTORY0DRIVES0LABEL0USERS0PAGE0NOPAGE  !$'*-/ #(. []=, :;<>%\|"()/#!@&+-*?   ; Z x 0NSun$Mon$Tue$Wed$Thu$Fri$Sat$???????????? ?Directory Passwds Stamp Stamp Label Reqd Update Label Created Label Updated ------------ ------- ------ ------ -------------- -------------- Press RETURN to continue. : Drive Characteristics 128 Byte Record Capacity Kilobyte Drive Capacity 32 Byte Directory Entries Checked Directory Entries Records / Directory Entry Records / Block Sectors / Track Reserved Tracks Bytes / Physical Record , Space: Number of time/date directory entries: Number of free directory entries: Active User : Active Files: # of files : Label for drive Access Create on off on on off on off 1}1}{o& " >0  ͑*!&  ~ :!<2!*!&  " 2 h2 !!6 >!!Y*!&  6:!<2!;6 f!$ 6(2! 6 D ~!% 6ͱ!!6 >!!*!&  ~2 ʺ*!&  N*!Mz:!<2!†v! q* &   ! p+q* ~ * N* #"          :$ e! 4~<<+~He   MC  ]! 6  ! p+q * DM   }! q* &  :~ҝ:}¦:}`O ! : ½  2}Õ! p+q* ~?2~*  2}͕  2}͕  ! p+q*      !Z 6Z 1 !Z 6,Z 1 !Z 6]Z 1 |    "    ! q* & . ! q* & e ! p+qi* DM! q: <2 O * : w! p+q* ~$* : <2 O * w* #" ! q: 0Oͦ! q:: db 50,51,33 lpdwin1: db 33,50,51 lpdfpy: db 33,34,35 nofile: DB cr,lf,'error: File not found: CPM3.SYS',cr,lf,'$' rderr: DB cr,lf,'error: Read failure: CPM3.SYS',cr,lf,'$' ds 64 stack: ds 0 buffer: ds 0 end 00000b,10000000B,00000000B,01010111B ; 5" GNAT,dd,ds,st dw gnat,0 DB 00000000b,00000001B,00000000B,00011000B ; 5" KAYPRO dd,ss,st dw kaypro0,0 DB 00000000b,00000001B,00000000B,01011000B ; 5" KAYPRO dd,ds,st dw kaypro1,0 DB 00000000b,00000001bdt dw z376,0 DB 00000000b,00001000B,00000000B,10110001B ; z37,dd,ss,dt dw z377,0 DB 00000000b,00010000B,00000000B,10110001B ; z37x,dd,ss,dt dw z378,0 DB 00000000b,00001000B,00000000B,11100011B ; z37,sd,ds,dt dw z379,0 DB 00000000b,00001000B,00000000B,11110011B ; z37,dd,ds,dt dw z37a,0 DB 00000000b,00010000B,00000000B,11110011B ; z37x,dd,ds,dt dw z37b,0 DB 00000000b,00100000B,00000000B,10010001B ; z100,dd,ss,st dw z100a,0 DB 00000000b,00100000B,00000000B,11010011B ; z100,dd,ds,st dw z100b,0 DB 00000000b,00100000B,00000000B,10110001B ; z100,dd,ss,dt dw z100c,0 DB 00000000b,00100000B,00000000B,11110011B ; z100,dd,ds,dt dw z100d,0 DB 00000000b,01000000B,00000000B,01010101B ; 5" EPSON,dd,ds,st dw epson,0 DB 00000000b,10000000B,00000000B,01010111B ; 5" GNAT,dd,ds,st dw gnat,0 DB 00000000b,00000001B,00000000B,00011000B ; 5" KAYPRO dd,ss,st dw kaypro0,0 DB 00000000b,00000001B,00000000B,01011000B ; 5" KAYPRO dd,ds,st dw kaypro1,0 DB 00000000b,00000001b,00000001b,01110011b ; 5" KAYPRO qd,ds,qt dw kaypro3,0 DB 11111111B ;FLAG FOR END OF TABLE $*MACRO dseg ;DPBs and SECTRN tables in banked mem MMS0: calcdpb 36,16, 83, 96,3,512,0 MMS1: calcdpb 36,16,173, 96,3,512,0 MMS2: calcdpb 36,32, 86,128,3,512,0 MMS3: calcdpb 36,32,176,128,3,512,0 Z370: calcdpb 20, 8, 92, 64,3,256,0 Z371: calcdpb 32, 8,152,128,2,256,0 Z372: calcdpb 40, 8,186,128,2,1024,0 Z373: calcdpb 20, 8,188,128,3,256,0 Z374: calcdpb 32,16,156,256,2,256,0,@ Z375: calcdpb 40,16,195,256,2,1024,0,@ Z376: calcdpb 20, 8,192, 64,3,256,0 Z377: calcdpb 32,16,156,128,2,256,0 Z378: calcdpb 40,16,195,128,2,1024,0 Z379: calcdpb 20,16,196,128,3,256,0 Z37A: calcdpb 32,16,316,256,2,256,0 Z37B: calcdpb 40,16,395,256,2,1024,0 Z100a: calcdpb 32, 8,152,128,2,512,0 ;; 5" disks Z100b: calcdpb 32,16,156,256,2,512,0,@ Z100c: calcdpb 32,16,156,128,2,512,0 Z100d: calcdpb 32,16,316,256,2,512,0 epson: calcdpb 80,16,190,128,2,512,0 gnat: calcdpb 80,16,169,128,1,512,0,@ kaypro0: calcdpb 40,8,195,64,1,512,64 kaypro1: calcdpb 40,16,197,64,1,512,64 ;drop support for expanded-directory format - risky anyway. ;kaypro2: calcdpb 40,16,197,128,1,512,0 kaypro3: calcdpb 68,16,1351,1024,2,512,0 ; ; NOTE: skew tables are for physical sector numbers. ; end Tracks per Inch - 96',CR,LF,'$' T192MSG: DB ' Tracks per Inch - 192',CR,LF,'$' HALFTK: DB ' Tracks per Inch - 48 tpi media i ; December 21, 1985 10:46 drm "GETDP3KP.ASM" maclib Z80 ; $-MACRO FFFF = @ equ -1 ; CP/M 3.0 system routine to select a DPB and sector translation table ; given the mode bytes (4) **************************************************** * label: calcdpb spt,spb,bpd,dpd,nst,pss,exd[,flg] * * spt = Sectors per Track * spb = Sectors per allocation Block * bpd = allocation Blocks per Disk (max (DS)) * dpd = Directory entries per Disk * nst = Number of System Tracks * pss = Physical Sector Size (bytes) * exd = Extra Directory entries reserved * [flg]= optional flag to intentionally produce incorrect EXM * (used to maintain compatability with previous formats) * calcdpb macro ?spt0,?spb0,?dsm0,?drm0,?off0,?pss0,?exd0,?flg ?bsm set ?spb0-1 ?exm set ?bsm shr 3 if ?dsm0 gt 256 ?exm set ?exm shr 1 endif if not NUL ?flg ?exm set ?exm shr 1 endif ?cks set ?drm0/4 ?exs set ?exd0/4 ?bsh set 0 ?@ set ?spb0 rept 8 ?@ set ?@ shr 1 if ?@ eq 0 exitm endif ?bsh set ?bsh+1 endm ?al0 set 0 rept (?cks+?exs+?bsm)/?spb0 ?al0 set (?al0 shr 1) or 10000000$00000000b endm ?al1 set low ?al0 ?al0 set high ?al0 ?psh set 0 ?psm set 0 ?@ set high ?pss0 rept 8 if ?@ eq 0 exitm endif ?psh set ?psh+1 ?psm set (?psm shl 1) or 1 ?@ set ?@ shr 1 endm dw ?spt0 db ?bsh,?bsm,?exm dw ?dsm0-1,?drm0-1 db ?al0,?al1 dw ?cks,?off0 db ?psh,?psm endm ; Entry: HL = points to Mode bytes ; Exit: A = error code (0 if DPs found) ; DE = points to DPB ; BC = points to sector translation table (or BC=0) ; HL = offset from ?serdp to beginning of format string table ; Uses 2 levels of stack. ; public ?getdp,?serdp cseg ;for now we'll put it all in common memory. ?serdp: ;user has to tell us where we are. 0000 01EA00 lxi b,PTRTBL-?serdp ;HL=memory address of "?serdp" 0003 09 dad b ;DE=mode bytes 0004 EB xchg jr gd1 0005+1803 ?GETDP: 0007 11EA00 lxi d,ptrtbl 000A E5 gd1: PUSH H ; save mode byte pointer 000B D5 push d ;save parameter table address 000C 4E mov c,m ;no need to mask format origin code. 000D 23 inx h 000E 46 mov b,m 000F 23 inx h 0010 7E MOV A,M ; get first mode byte 0011 E681 ani srm0 ; mask FIRST BYTE 0013 5F MOV E,A 0014 23 INX H ; and point to the second 0015 7E MOV A,M 0016 E670 ani srm1 ; mask SECOND BYTE 0018 57 MOV D,A 0019 E1 pop h ; table lookup... NXDPB: 001A 7E MOV A,M ; format origin code. 001B 23 inx h 001C A1 ana c ;compare it: if the format requested matches jrnz got1 ;(if the bit is set in both DPB and requested 001D+2004 001F 7E mov a,m ; mode ([NZ] condition) then we have a match.) 0020 A0 ana b ;check for possible extend format origin jrz nxd1 ;... 0021+283C 0023 23 got1: inx h 0024 7E MOV A,M ; get first byte 0025 23 INX H 0026 E681 ani srm0 ;mask it also 0028 BB CMP E ;compare to target mode jrnz NXD3 0029+2036 002B 7E MOV A,M ; and the second 002C E670 ani srm1 ;mask it 002E BA CMP D ;compare it jrnz NXD3 002F+2030 0031 23 inx h 0032 5E mov e,m ;pick up DPB 0033 23 inx h 0034 56 mov d,m 0035 23 inx h 0036 4E mov c,m ;pick up XLAT also 0037 23 inx h 0038 46 mov b,m 0039 EB xchg ;DE=table pointer, HL=DPB 003A E3 xthl ;put DPB on stack, get HL=requested mode 003B 23 inx h 003C 23 inx h ;point past "format origin" 003D C5 push b ;put XLAT on stack. 003E EB xchg 003F 01FBFF lxi b,-5 0042 09 dad b ;point back to table's modes 0043 EB xchg ; 0044 1A ldax d ;get "excess" mode bits. 0045 E600 ani xsm0 ;mask in bits to give caller. 0047 4F mov c,a 0048 3EFF mvi a,(not xsm0) and 0ffh 004A A6 ana m ;clear callers bits prior to setting again 004B B1 ora c ;complete callers mode bytes 004C 77 mov m,a 004D 23 inx h 004E 13 inx d 004F 1A ldax d ;get "excess" mode bits. 0050 E68F ani xsm1 ;mask in bits to give caller. 0052 4F mov c,a 0053 3E70 mvi a,(not xsm1) and 0ffh 0055 A6 ana m ;clear callers bits prior to setting again 0056 B1 ora c ;complete callers mode bytes 0057 77 mov m,a 0058 C1 pop b ;restore XLAT 0059 D1 pop d ;restore DPB 005A 217200 lxi h,strtbl-?serdp ; load address of string table 005D AF XRA A ; and clear the accumulator 005E C9 RET ; as this is the successful return 005F 23 NXD1: INX H 0060 23 NXD2: INX H 0061 23 nxd3: inx h 0062 23 inx h 0063 23 inx h 0064 23 inx h 0065 23 inx h 0066 7E MOV A,M 0067 FEFF CPI 11111111B jrnz NXDPB ; loop if more entries in table 0069+20AF 006B E1 POP H ; restore mode byte pointer 006C 217200 lxi h,strtbl-?serdp ; load address of string table 006F AF3D xra a ! dcr a ; return [NZ] if DPs not found. 0071 C9 RET ; as this is the error return ; ; (10-256 byte) ; Format string name table - all formats must have a entry here ; 0072 4B41595052strtbl db 'KAYPRO ' ;bit 0 - must be 8 characters wide 007A 554E555345 db 'UNUSED ' ;bit 1 0082 4D4D532020 db 'MMS ' ; 2 008A 5A33372020 db 'Z37 ' ; 3 0092 5A33375820 db 'Z37X ' ; 4 009A 5A31303020 db 'Z100 ' ; 5 00A2 4550534F4E db 'EPSON ' ; 6 00AA 4153534F43 db 'ASSOC ' ; 7 00B2 464D543820 db 'FMT8 ' ; 8 00BA 464D543920 db 'FMT9 ' ; 9 00C2 464D543130 db 'FMT10 ' ; 10 00CA 464D543131 db 'FMT11 ' ; 11 00D2 464D543132 db 'FMT12 ' ; 12 00DA 464D543133 db 'FMT13 ' ; 13 00E2 464D543134 db 'FMT14 ' ; 14 ; ;---------------------------------------------------------------------- ; ; ;---------------------------------------------------------------------- ; ; 0081 = SRM0: equ 10000001B ; 0070 = SRM1: equ 01110000B ;SEARCH MODES MASKS 0000 = XSM0: equ 00000000B ; 008F = XSM1: equ 10001111B ;EXCESS MODES MAS 2036 = VERS EQU '6 ' ; MARCH 17, 2017 18:58 DRM "MODE.ASM" ; FOR BOTH CP/M PLUS AND MP/M-II (77500) ; ST = DRIVE AND MEDIA SINGLE TRACK ; DT = DRIVE AND MEDIA DOUBLE TRACK ; QT = DRIVE AND MEDIA QUAD TRACK ; DTS = DRIVE DOUBLE TRACK, MEDIA SINGLE TRACK ; QTS = DRIVE QUAD TRACK, MEDIA SINGLE TRACK ; QTD = DRIVE QUAD TRACK, MEDIA DOUBLE TRACK MACLIB Z80 $-MACRO 0000 = CPM EQU 0 ; JUMP TO BIOS 000D = CR EQU 0DH ; CARRIAGE RETURN 000A = LF EQU 0AH ; LINE FEED 001B = ESC EQU 1BH ; EXCAPE 0007 = BELL EQU 7 ; BELL 005A = SEARCH EQU 90 0064 = LPTBL EQU 100 ; OFFSET TO LPTBL TABLE VECTOR FROM WBOOT 0066 = THREAD EQU 102 ; MODULE THREAD STARTING VECTOR 0068 = ?SERDP EQU 104 000C = STROFF EQU 12 ; STRING ADDRESS OFFSET FROM INIT ROUT OF MOD ; ; SYSTEM (BDOS) CALLS ; 0001 = CONIN EQU 1 ; CONSOLE INPUT 0002 = CONOUT EQU 2 ; CONSOLE OUT 0006 = CONIO EQU 6 ; DIRECT CONSOLE I/O 0009 = TYPE EQU 9 ; CONSOLE STRING PRINT 000A = RDCON EQU 10 ; READ CONSOLE BUFFER 000B = GETCON EQU 11 ; GET CONSOLE STATUS 000C = GETVER EQU 12 ; GET CP/M VERSION NUMBER 000D = DSKRES EQU 13 ; DISK RESET 0018 = LOGIN EQU 24 ; RETURN LOGIN VECTOR 0019 = CURDSK EQU 25 ; GET CURRENT DISK 001A = SETDMA EQU 26 ; SET DMA ADDRESS 0025 = RESDRV EQU 37 ; RESET DRIVE FUNCTION 0100 ORG 0100H 0100 C36D01 BASE: JMP START 0005 = BDOS EQU BASE-100H+5 ; STANDARD CP/M ENTRY 005C = FCB EQU BASE-100H+5CH ; INPUT FILE CONTROL BLOCK 0080 = DMA EQU BASE-100H+80H ; INPUT DMA ADDRESS 0100 = TPA EQU BASE ; CP/M PROGRAM AREA 0103 0000 SYSADR: DW 0 0105 0D0A4D4F44SIGNON: DB CR,LF,'MODE v3.10' 0111 3620 DW VERS 0113 0D0A0A24 DB CR,LF,LF,'$' 0117 0752657175ERRVER: DB BELL,'Requires CP/M 3.1 or MP/M',CR,LF,'$' 0134 0747455444NODPER: DB BELL,'GETDP.REL not linked into system',CR,LF,'$' 0158 VERERR: LSPD OLDSP 015C 111701 LXI D,ERRVER 015F 0E09 ERROUT: MVI C,TYPE 0161 C30500 JMP BDOS NOGETDP: 0164 LSPD OLDSP 0168 113401 LXI D,NODPER 016B JR ERROUT START: 016D SSPD OLDSP ; SAVE OLD STACK POINTER 0171 31A60D LXI SP,STACK ; FOR A FAST REBOOT 0174 110501 LXI D,SIGNON ; SIGNON MESSAGE 0177 0E09 MVI C,TYPE ; STRING OUTPUT FUNCTION 0179 CD0500 CALL BDOS 017C 0E0C MVI C,GETVER 017E CD0500 CALL BDOS 0181 7D MOV A,L 0182 FE30 CPI 30H 0184 DA5801 JC VERERR ;CAN'T RUN 2.F OR EARLIER. 0187 7C MOV A,H 0188 2A0100 LHLD CPM+1 018B FE01 CPI 1 ;MP/M - 018D C29501 JNZ ST0 0190 23 INX H 0191 5E MOV E,M 0192 23 INX H 0193 56 MOV D,M 0194 EB XCHG 0195 220301 ST0: SHLD SYSADR 0198 016500 LXI B,?SERDP-3 ; CHECK IF GETDP IS LINKED IN 019B 09 DAD B 019C CDCB06 CALL HLIHL 019F LDED SYSADR 01A3 AF XRA A ; CLEAR A AND [CY] 01A4 5F MOV E,A 01A5 DSBC D 01A7 CA6401 JZ NOGETDP 01AA CDFA01 CALL SPCHK ; SCAN COMMAND LINE FOR FIRST 01AD C2BB01 JNZ HADARG ; NON SPACE CHARACTER. 01B0 110C07 LXI D,HELP ; HELP TEXT 01B3 0E09 MVI C,TYPE 01B5 CD0500 CALL BDOS 01B8 C3FE06 JMP DONE ; THIS IS ALL, LET'S LEAVE 01BB CD2A02 HADARG: CALL INCMD ; EVALUATE THE COMMANVERS EQU '5 ' ; March 12, 2017 16:26 drm "MODE.ASM" ; for both CP/M plus and MP/M-II (77500) MACLIB Z80 $-MACRO CPM EQU 0 ; JUMP TO BIOS CR EQU 0DH ; CARRIAGE RETURN LF EQU 0AH ; LINE FEED ESC EQU 1BH ; EXCAPE bell equ 7 ; bell search equ 90 lptbl equ 100 ; OFFSET TO lptbl TABLE vector from WBOOT thread equ 102 ; module thread starting vector ?serdp equ 104 stroff equ 12 ; string address offset from init rout of mod ; ; SYSTEM (BDOS) CALLS ; CONIN EQU 1 ; CONSOLE INPUT conout equ 2 ; console out CONIO EQU 6 ; DIRECT CONSOLE I/O TYPE EQU 9 ; CONSOLE STRING PRINT RDCON EQU 10 ; READ CONSOLE BUFFER GETCON EQU 11 ; GET CONSOLE STATUS getver equ 12 ; get CP/M version number DSKRES EQU 13 ; DISK RESET LOGIN EQU 24 ; RETURN LOGIN VECTOR CURDSK EQU 25 ; GET CURRENT DISK SETDMA EQU 26 ; SET DMA ADDRESS RESDRV EQU 37 ; RESET DRIVE FUNCTION cseg base: JMP START BDOS EQU base-100h+5 ; STANDARD CP/M ENTRY FCB EQU base-100h+5CH ; INPUT FILE CONTROL BLOCK DMA EQU base-100h+80H ; INPUT DMA ADDRESS TPA EQU base ; CP/M PROGRAM AREA sysadr: dw 0 SIGNON: DB cr,LF,'MODE v3.10' dw vers DB CR,LF,LF,'$' errver: db bell,'Requires CP/M 3.1 or MP/M',cr,lf,'$' nodper: db bell,'GETDP.REL not linked into system',cr,lf,'$' vererr: lspd oldsp lxi d,errver errout: mvi c,type jmp bdos nogetdp: lspd oldsp lxi d,nodper jr errout START: SSPD OLDSP ; save old stack pointer LXI SP,STACK ; for a fast reboot LXI D,SIGNON ; signon message MVI C,TYPE ; string output function CALL BDOS mvi c,getver call bdos mov a,l cpi 30h jc vererr ;can't run 2.F or earlier. mov a,h lhld cpm+1 cpi 1 ;MP/M - jnz st0 inx h mov e,m inx h mov d,m xchg st0: shld sysadr lxi b,?serdp-3 ; Check if GETDP is linked in dad b call hlihl lded sysadr xra a ; clear A and [cy] mov e,a dsbc d jz nogetdp CALL SPCHK ; scan command line for first JNZ HADARG ; non space character. LXI D,HELP ; help text MVI C,TYPE O: O! q* M:ͦ! q* & ! ͆K* & ! ͆M! q* M& /ͦ: e : s ! 6 : <2 O * ~2 : ” \ Æ : 0 ! s+q! 6 ͆ ͕ ڶ ͕  : : : H2  : 0! w \ ö ! : #~! H : ! s+q+q͆ ! : 4 \ * M* ͞ ! s+q: 2 :  * & ) >;H{ : =: ! q* & ! ͆))))* & ͈ } ͞ =2 : 2! !!6 * &  ~2!/*! 2 /cN 2 : !!:  H * & ) : N_ !mͥq* &  NC * M* C _ * #q#p ͞ O  * w:;  O  * w* ~¬ : :  :;  2! * 6 :;  O  * w!!s+q:!!!! 6N!m"!:  !n"!!  ! +s#r! 4 ! 6 > ! P : =2 2 ! !6 * & ) : !m! M   * ~2 !*  ~2!*  ~2!* #^#V" +! ͆! !s ! !6 :  >;! HҮ ! !6 * & ) : !m ! s+4* ~ : !O ! DMͽ ͦ* MK * MK * M&  ͦ* !M *!M * ~ & *!M! !p+q! " !* !"  " * ~ ~He Q ! 6 Þ * ~~Hқ ! 6 * ~2 ͢ * & * " !Þ !-!p+q!!6.*,!DM! -¶ !' !.!6 > !.! *.!&  ! N:.!<2.! \* ##N!  ͥ"/!!1!q:1!2 Oͅ !3!p+q!2!* >2!y#M͹!7!s+q+p+q:7!=27!f*4!:6!w*4!#"4!I!!s+p+q+p+q> !*!*!͆!!s*!*!͆"!*!! ͆"!> !º:! :!!!6 :!0Ov!!p+q!'"!!!6> !8*!*!͆:!=2!O !8! s*!*!͆"!*!! ͆"!!!6#6:!=2!}*!& 8! ~0O~:!:!Hz,~A!!q*!& 8! ~ ¤:!Ҥ:! ʤ*!M!!6 !!r+s+p+q!!6 #6 >!!0*!& *!*!& *!~!!#N *! w*!& *!^ ! ͆!!s#N *! ^ ! ͆*!& *!q:!<2!!!p+q8! <?! <*!N#F*!##~2!!!6 >!!ڙ:!҇*!& w!) N#F?!ͱ:!2!:!<2!d8!?!ͱ9!!p+q*!##~2!*!##~*!##w*!*!q#p*!#:!*!#w!!p+q*!#* ##N͹ * *!##* ##NH*!##w*!* ##N*!q#p: AO !!r+s+p+q*!/!a*!q#p*! ڒ*! *!q#p*!N#F*!q#pc!!q! "!"!!!6 ! "! * !:!*!DM2!:!/!!H *!"!ҫ*!!"! i8*!##6  * N#F*!q#p,ͦE * N#F^ * ^#V))DMy * ~  * N!!+s#r*!DM  1:!!p+q*!##6 *!*!s#r!!p+q!'"!!!6 > !ʚ*!*!͆{2!*!*!͆"!*!! ͆"!> !!!+~ Hҗ!!6:!0O5>0 ҹ" ͓DM$* Mqͦ1k!!p+q 8R*!}OW͛: : 2!"!S"!!!6 > !ʈ*!}g: /X!!:!U*!DMg*!M*!DM!!+s#r!!+s#r#~ !X *X g 8)*V g !!6 >!! *!& & 6 *!& 6 ) > w#6 :!<2!! "X 5! "!:}:}2!*!&  ~2!:!!*!&  "!*!##"!*!#"!:!2!:!2!O !& 6>!!Ґ*! * ~Ҥ*!~ *!& 6 ) N#F*!& 6 ) q#p*X #"X %* &  6> !X  * N#F`i"X  * N#FPY*X *!"V 8QhO g 8`* &  ~/\!!6 >!!ڐ*!& & ~҆*!& g:!<2!a 8o!!6 >!!*!& & ~*!& 6 ) N#Fg:!<2!¡͘* &  ~/͘!!qD> !! :}0:}`O ! ~ * * Ḿ2!> !!/ :}o& "!~i8 Eiji:!@@†Ìi B:% /:!րHҽ:!@@:!:!  *! DM͟  *! DM͟ >͑: AO !!6> !!x:! ].*!& *!>O:!<2!G!!q!!6*!&  :•> *!&  :!©:!:!<2!Â!!r+s+p+q)!!6 ?:! :!2!*!My2 !!6: ]:!/ *!My2 ?:!2 ͩ:!:!2 : 2!:!2!!!6 :!2!?:! Jñ*!&  *!*!& *!=2!!!:!£!!6!!6:!!!ڠ]:!/Җ6:!<2!~æ6!!6 ͩ> :!2!:  l+s#r): * #" :2 :!:!2!*!& *!~2!*!& *!:9:!<2!:!2!*!& *!:!(*!& *!~2!!!6 * ~2!:!2!!!6* #~2!:!<2!*!& *!:}!!6 Ó*!& *!:!ʓ!!6 :!<2!*!& * ~2!*!& * ~2!*!My2 : : H: H: H:!<2!*!& * ~2!*!My2 :!2 :  l#+s#r* Ny2 !D* #" ):  +"!!!6: !!y*!N*!#"!:!<2!W!!q *!& ͥ^ *V& ~ ʞ *!& ͥ^ *U& ~ ʾ1 *!& ͥ^ *T& ~  *!& ͥ^ *W& ~ # *!& ͥ^ *S& ~ : :: 2 * &  : w* #" * Ny2 : ZÔ!: q!: qÔ * & ͥ^ *V& 6* #" > * & ͥ^ *V& ~ * & ͥ^ *V& 6 ʹ2 !X: !$ 6!Y: !$ 6  * & ͥ^ : =O 6-͑iE!: :>!: G>Zʹ2! _Þ:!=2 * &  : w * & ͥ^ *V& 6!: ʝ* +" ͑iE! 6* Ny2 ! * & ͥ^ *V& 6! 6!: ;2 -: K-!: !!: !L! 6* #" !: K* Ny2 !K?͑iEi`N#Fog_ og_ ogDM! >))덑o|gҟ =DM! >))Ҵ =¬~ º~ ^#V) ^#V|g}o _ {ozgO {ozgi`N#Fogo& og_ {_z#W P'!5^ !/~ !~6 20͕%2.|z}z> u!.~w:.W=*u!.4C*V0^#V"V0ý!.5¯:20͕%!^ 4!/w>R͘%>V͘%>Dý>Pý>Lý>Oý>Bý>Sý>N͘% *6 ".~ 6  - !2~B6 ~44O !! s#r!1~ _6 ^ 4! w!p!2~~! 55N !! N#fiooo& )^#fk9BIO[ov ͌z{>ɯo> g͌"!6 ů{_zW5> )D*OxG !? DM! xGyO23)#͌)=R|g}o=^͌͌roz{͉͌͌}|͉͌Þ͌Þ͌ë͉͌!! o#Ã͌zg{o͌zg{o͌zg{oolo& 3:0: 0 ;!,ɯ2122=2 ! "I0&q!1~\5_ ! ~͔D:2:/ *!"I0:/ :0:0 ! 0^#=ʙV¨*0!҂ :0:0& ! !>O: >2 yU`:10_ !~0!1s! ~͔ yU!1~N=w_ ! ~QZP>2 ypP͘% >U̘%>: 2 3>E͘% óf :.O*.~H:.=!4> ͕%0:/#". ͆%2G:0xa{_ ʇ ʇ:0x҇_ <20!/w:e/S:e/9ɯ2f/2d/2e/:0:e/ !2f/g/~#»S͉!f/~4!g/_ :e/w2e/ɯ<*V0"36*"V0ɯ2!4!f/6 ".!f/~55!d/^4 !g/~f:.:e/JGwf^l͗^{:e/&{!f/4#ww&ʞGʱ2e/xf͗ :e/&ʕ:0  ý͗&{&{ý͗  !e/~&>6 2/-!.6*M0"$/B".2f/*"V0͗ 2f/2e/2[020> 2͕%>20ɯ202!0~@$6 ^ 4#:[0w~$w:[00 6:[0A:[0?e@eAɷP6 o2[0:Z0ʦ:\0 :O0¦:[0':[0 !20:[0 R;/>20:Z0?:\0:O0?́;B*`0*X0++{z~ ++!+"X0:Z02Z0́ͪ'2Z0X:[0*K: ḰͪX? X́ö20Pg>ã6r>ã:[0'ƒ2[0>ã ¡:.ʔ>+2/͕%!/6 >20>20:[02́:0:Z0: 0=!EQ<!LT:[0=!LE>!GT:[0=!GE2[0" 0!04>20![0:0/ʦg¦´/ʦA¦:[0O<QA>HHR>22[0m:B_>fD> j!052! "0!0N#~#A҄0Æ7O! ~*0! ʩң)Ú "0 x:[0 '¦́'æ:[0 :[0,;%:[0 !:[0; ,202́/>20:[02́:0G:0::0l:[0'́:[0' 20/:[0'|>20^—́:[0  <¨!~4 >¼!~5 : >20>V>O>I>B͘% !QéÉ $ ? H Y ` e Ò ü ò ~ÏGÇåûfD?<==: e> ?; > <>; ;< = R>>> F>; >G= =<= =>= s;=P= *>=$?P:-?]>*<< == <; =>>y> ;: =;>? >P? <=?>>= << i; m=> c==>o>v<=<;8?N!Nw#w#W! "V0!.w#w#l2N!.~4^ !.~w!.ͼ!.ͼ!.ͼ!/~w!$/ͼ!D/~w!T/~wN#Fp+q!.~^ !.!. !. !. !/!$/ !D/!T/5~wN#Fq#p>BØ%!0" * F#%2NG*V0##~w*V0##~<͉ :.t!.N !. yq~t +aG=#w#wY*M0!0n& {ozg"V0!K0{#z"M0 b*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#Ž&!\ 6 0 ڱ&>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.-> ͕*> ͕*͞*> ͞*ws:*eM !b+!s{!f!6 :!b*b*^DM =ͅ N-  *b"b:<2)f! "b!q9bڀ*b*^:w*b#"b!q:6ڶZͅ ʱ- !66 *6&  :w:6<26!J6 *b} :J<2Jm=? :x- : ;*dM .=\ -=ͨ ;: *eM =ͨ .M= -C!q: Y*M !q:a/>z!/H!q*MaҎ:_:!q:ҥ*My:!p+q!'"!6 > **ͪ{2**ͪ"*! ͪ": !!1?:P 2Ä CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321 ERROR: $ $ Press RETURN to continue $ $Reading HELP.HLP index.$Too many entries in Index Table. Not enough memory.$ $ Creating HELP.HLP....$$ HELP DAT HELP.DAT not on current drive.$Too many entries in Index Table. Not enough memory.$$ HELP HLP Unable to Make HELP.HLP.$ Writing file HELP.HLP.$ Writing file HELP.HLP.$Closing file HELP.DAT.$ Closing file HELP.HLP.$HELP.HLP created $ Extracting data....$ HELP HLP Unable to find file HELP.HLP.$ HELP DAT Unable to Make HELP.DAT.$Writing file HELP.DAT.$Unable to Close HELP.HLP.$Unable to Close HELP.DAT.$Extraction complete HELP.DAT created $ Topics available:$ ENTER .subtopic FOR INFORMATION ON THE FOLLOWING SUBTOPICS:$ $ $ $Reading file HELP.HLP.$ HELP> $Requires CP/M Version 3$  , HELP HLP HELP UTILITY V1.1 At "HELP>" enter topic {,subtopic}... EXAMPLE: HELP> DIR BUILT-IN $? HELP Topic:$Not found$No HELP.HLP file on the default drive.$1?1?!E6 !,6 ͈"-*-|*-}0HҷN1 =2/1 <_ ! p{201 !C6!C6 ͷ 2j:A+::BJ: \ u\ ͡2 :?/;1X:j \!)6 X!,62j:j &!)6 1x͛ zdʛ͚=x͛ ˜!)6 ,V 2E H:E/ ,V 2E:E/ IX,V 2E H*jM.,V 2E H,V 2E HPX,V 2E H!)6 :E/2j\\ 2D:Z NEv  !Kq*K&  !Mp+q*L  !Op+q*N  !Pq*P&     !Rp+q*Q !Tp+q *S 6  *S 6 *S !Vp+q*U !Xp+q*W !Zp+q*Y !\p+q *[ 6  *[ 6 *[ !^p+q*]! !`p+q*_ !bp+q*a$    !er+s+qX*dDMXX:ctE!jr+s+p+q+q*f*gDM*i -’!nr+s+p+q!o6 #6 :p *p& *k~ H *p& *k*p& *m  *p& *k*p& *m !o6 !o6!p6 :p<2pí:o!qq:q<2q>!qR \  H !q6 R !E6!q6 :q!sp+q!t6 :@/!C *r~<*rwO:/ X*r6 *r~ ž x*rwÉ X*r~½ \ *rwE *r~ !t6*r6  H *r6  H:t ͼ"u*u"w!{6 ! "y:{/>!wH҇ >y)))) DM%\  O \ o& "yN*y)))) ~$e !{6:{/҄ >w+s#r *y"y  %>w:{/HҶ \ o& "yN!|6 : ! !|6: !| *|&  ~ *|&  6 *|&  ~, *|&  6 :|<2| !|6! :|*|& ~ HA :|<2| *|&  ~.d :)2}*|&  6 i !}6 :}2|> !|ڛ  *|& ͏x u:|<2|o :}2|!~6!6 #6 *~&  ~ :/H! *~&  ~  !6 *~&  ~ *~& ~[H*~&  ~ H: :| HHҥ *~&  >`*~& ~{Hp *~&  ~  *|& ͏x *& HqÔ *~&   *|& ͏x *& w:~<2~:<2 :|<2|> !|! !6 *~&  ~[ :|=o&  ͏x ~ :|=2| *|& ͏x 6 CALL BDOS JMP DONE ; this is all, let's leave HADARG: CALL INCMD ; evaluate the command line JNZ ENDERR ; bad command line if non-zero LDA NEWARG ; get the data flag ORA A ; zero if data was entered JNZ OUTMOD ; if none, output the mode data CALL GETMOD ; get the mode byte CPI 0FFH ; check for error JZ NODRV CPI 0FEH ; check for wrong release JZ WRONG MOV A,M ANI 80H ; CHECK MODE BYTE DISABLE BIT JNZ FIXED CALL UPMODE ; update the mode byte CALL RESET ; reset the drive OUTMOD: CALL GETMOD CPI 0FFH ; check for drive not available JZ NODRV CPI 0FEH ; check for wrong release JZ WRONG MOV A,M ANI 80H ; CHECK NODE BYTE DISABLE BIT JNZ FIXED CALL MPRINT ; and print the new mode values JMP DONE ; and we're done SPCHK: LXI H,DMA ; number of characters input MOV A,M ORA A RZ ; no characters available INX H SHLD CMDPTR MOV C,A MVI B,0 DAD B MVI M,0 ;terminate command tail with a null LHLD CMDPTR MORSP: CALL CHAR CPI ' ' ; and check for spaces JZ MORSP DCX H SHLD CMDPTR ORA A ;[ZR] if a null (end of string) RET ; zero if no arguments CHAR: MOV A,M ;returns [CY] if not end of string ORA A RZ ;END OF BUFFER INX H CPI 'a' RC CPI 'z'+1 CMC RC SUI 'a'-'A' STC RET ; PARSES input command line ; INCMD: MVI A,1 STA NEWARG ; initialize argument flag to none LHLD CMDPTR ; pointer to first non-blank character CALL CHAR ; get it JNC BADCMD CPI 'A' ; check range of A-P JC BADCMD CPI 'P'+1 JNC BADCMD STA NODRMS ; setup error messages etc. STA DSKLT STA DIFD STA WRGD SUI 'A' ; make a drive number (0-15) MOV B,A ; and save in B CALL CHAR ; get a character JNC BADCMD CPI ':' ; which must be a ':' JNZ BADCMD MOV A,B ; get drive STA NDRIVE ; save for later NXARG: CALL CHAR RNC CPI ' ' JZ NXARG DCX H NXOPT: push h ; get address of format strg tbl in de call serdp xchg pop h MVI C,0 ; c = format bit number counter CONFIG: mvi b,8 ; length of entry in format string table PUSH H mov a,c CPI 15 ; if c = 15 then end of table JZ NOTCNF ;NMEMONIC NOT FOUND ldax d FIG0: CMP M JNZ FIG1 INX H INX D dcr b jz fig5 LDAX D CPI ' ' JNZ FIG0 fig5: MOV A,M ORA A JZ FIG2 CPI ',' JZ FIG2 CPI ' ' JNZ FIG1 FIG2: POP D ;DISCARD OLD BUFFER POINTER LDA CNFIG ORA A ;IS THIS THE SECOND ENTRY OF THIS TYPE? JNZ BADCMD ;ERROR IF IT IS. MOV A,C ADI '0' STA CNFIG JMP MORE FIG1: INX D ;go to end of format string table djnz FIG1 FIG3: POP H ;restore parameter address INR C ; JMP CONFIG NOTCNF: POP H ;WE KNOW THERE MUST BE AT LEAST ONE CHARACTER CALL CHAR ; get a character for the loop CPI 'D' ; check for 'D' command JZ DPROC CPI 'S' JZ STEP ;STEPRATE OR "SINGLE XXX" CPI 'H' ; half track option maybe JNZ BADCMD HPROC: MOV B,A CALL CHAR JNC BADCMD CPI 'T' JNZ BADCMD TRK: MOV A,B STA TRACK JMP MORE SPROC: MVI A,'S' DPROC: MOV B,A ; save SINGLE or DOUBLE CALL CHAR ; get the character JNC BADCMD CPI 'T' JZ TRK CPI 'D' JZ DENS CPI 'S' JNZ BADCMD MOV A,B ; get the SIDE argument STA SIDE JMP MORE DENS: MOV A,B ; get the DENSITY argument STA DENSITY JMP MORE STEP: MOV A,M ; get next argument CPI '0' ; must be numeric JC BADCMD CPI '9'+1 JNC SPROC CALL CHAR SUI '0' ; make it numeric MOV B,A ; and save it MOV A,M ; it must be a number, a comma, or null ORA A JZ SOK CPI ',' JZ SOK CPI ' ' JZ SOK CPI '0' JC BADCMD CPI '9'+1 JNC BADCMD CALL CHAR SUI '0' ; numeric, make it binary MOV C,A ; and save it MOV A,B ; get first number ADD A ADD A ADD B ADD A ; TIMES 10 ADD C ; plus second number MOV B,A ; expected in B SOK: MOV A,B ; get step rate STA STEPRT ; and save it MORE: CALL CHAR ; get next character JNC FINISH CPI ',' ; continue if a comma JZ NXOPT0 CPI ' ' ; or a space JZ MORE DCX H JMP NXOPT NXOPT0: CALL CHAR JNC FINISH CPI ' ' JZ NXOPT0 DCX H JMP NXOPT FINISH: XRA A STA NEWARG RET BADCMD: MVI A,1 ORA A ; set the zero flag RET ; update the present mode value ; UPMODE: push h popix LDA CNFIG ; see if configuration was specified ORA A JZ BIT1 sui '0' ;make it binary 0,1,2... lxi h,00000000$00000001b inr a gc1: dcr a jrz gc0 dad h jr gc1 GC0: stx H,+0 stx L,+1 BIT1: LDA SIDE ; see if side was specified ORA A JZ BIT3 resx 6,+3 ; clear the side bit CMA ANI 1 ; mask the lsb RRC RRC ; to bit 6 orax +3 ; into the mode byte stx a,+3 ; and update the byte BIT3: LDA DENSITY ; see if density was specified ORA A JZ BIT4 resx 4,+3 ; clear density bit CMA ANI 1 RRC RRC rrc rrc ; to bit 4 orax +3 ; mask the bit stx a,+3 ; and save it in memory BIT4: LDA TRACK ORA A JZ BIT5 cpi 'D' jrz sdt cpi 'S' jrz sst resx 5,+3 ; reset "Media Track density" setx 5,+2 ; set "Drive track density" jr bit5 SDT: setx 5,+3 ; SETX 5,+2 jr bit5 SST: resx 5,+3 RESX 5,+2 BIT5: LDA STEPRT ; get the requested step rate ORA A ; see if user specified one JZ BIT6 bitx 7,+2 ; size, 5.25 or 8 LXI H,STEPTB LXI D,4 ; table is 4 bytes long JZ FIVE DAD D ; add offset FIVE: MVI B,0 ; initial step rate NXRT: CMP M ; compare request with table JC GSRT ; memory is greater, this is it INX H INR B DCR E JNZ NXRT MVI B,3 ; in case of overflow GSRT: MOV A,B ; step rate mask resx 2,+2 resx 3,+2 ; clear bits rlc rlc orax +2 ; and update mode value stx a,+2 BIT6: call serdp ORA A JNZ NOCHG ; error if non-zero (NO DPB FOUND) ; ; mode bytes updated by "?serdp" ; LXI H,MINFO ; NEW MODE BYTE POINTER PUSH H MVI A,4 ; number of bytes to check LBCD MODPTR ; OLD mode byte pointer LDED MSKPTR ; mode byte mask pointer ANOTHR: PUSH PSW ; save the counter LDAX B ; get old mode byte XRA M ; set bit for values changed XCHG ANA M ; check for changed bytes XCHG JNZ NOCHG ; error if non zero INX D INX vers equ '0c' ; December 21, 1985 15:57 drm "CENTR.ASM" ;******************************************************** ; Centronics Printer module for the KAYPRO * ; Copyright (C) 1985 Douglas Miller * ;******************************************************** maclib Z80 false equ 0 true equ not false dev0 equ 206 ndev equ 1 port equ 018h ;parallel printer port sysctl equ 014h ;status/ctrl bits extrn @ctbl,@vect cseg ;common memory, other parts in banked. dw thread db dev0,ndev jmp init jmp nullst jmp nullin jmp outst jmp output dw strcnt dw tblcnt dw modcnt strcnt: db 'KAYPRO ',0,'Parallel Printer ',0,'v3.10' dw vers db '$' modcnt: db 00000000b,00000000b,10000000b,port thread equ $ dseg ;banked memory. tblcnt: ;initial value only, copied by BIOS to its table. db 'LPT ',00000010b,0 ;Output, no baud, no protocal init: ret nullin: mvi a,1ah ret output: outp0: call outst jrz outp0 ; wait for not busy mov a,c out port ; send data di in sysctl ani 10110111b out sysctl ori 00001000b out sysctl ei ret outst: in sysctl xri 01000000b ani 01000000b rz nullst: ori true ret ; return true if ready end ; System Control Block definitions public @civec,@covec,@aivec,@aovec,@lovec public @mxtpa,@ermde,@date,@hour,@min,@sec scb equ 0fb9ch @civec equ scb+22h @covec equ scb+24h @aivec equ scb+26h @aovec equ scb+28h @lovec equ scb+2ah @ermde equ scb+4bh @date equ scb+58h @hour equ scb+5ah @min equ scb+5bh @sec equ scb+5ch @mxtpa equ scb+62h end  maclib z80 numeric equ 1 ; Numeric Keypad codes standard equ 0 ; 81-292a ROM codes ; else: return raw code from keyboard ; TODO: use commandline options to select keypad codes org 0100h lxi sp,stack ; TODO: check for CP/M 3? mvi c,201 ; keyboard device call search jc nokbd ; double check sanity ora a jnz nokbd ; TODO: more sanity checks? ; HL -> jmp init lxi d,5*3+4 dada d mov e,m inx h mov d,m ; DE = modes table lxi h,4 dad d ; HL = keycnv xchg lxi h,keypad lxi b,kplen ldir jmp cpm search: lhld cpm+1 lxi d,31*3 dad d pchl bs eq 8 lf equ 10 vt equ 11 ff equ 12 cr equ 13 keypad: if numeric ; Number Pad conversion db 0, '0', '.', 0, 0 db '1', '2', '3', cr, 0 db '4', '5', '6', ',', 0 db 0, '7', '8', '9', '-' db 0, vt, lf, bs, ff else if standard ; As returned by ROM 81-292a db 0, 084h, 091h, 0, 0 db 085h, 086h, 087h, 090h, 0 db 088h, 089h, 08ah, 08fh, 0 db 0, 08bh, 08ch, 08dh, 08eh db 0, 080h, 081h, 082h, 083h else ; "neutral" - same as raw code from keyboard db 0, 0b1h, 0b2h, 0, 0 db 0c0h, 0c1h, 0c2h, 0c3h, 0 db 0d0h, 0d1h, 0d2h, 0d3h, 0 db 0, 0e1h, 0e2h, 0e3h, 0e4h db 0, 0f1h, 0f2h, 0f3h, 0f4h endif endif kplen equ $-keypad ds 64 stack: ds 0 end [:~<2~:|<2|!6 :~<2~î !?6 #6 #6 #6 > !|'!6 : ' *& ͏x ~[ *& ͏ ~C !A6:|==2| *& ͏ ~E¤ !B6:|==2| *& ͏ ~N !@6:|==2| *& ͏ ~L !?6#6:|==2| *& ͏ ~ :|==2|:|=2|!6 :<2= :|&X!6 >!` *& )))) >u:<26!6 > #w#6  ͼ"*" \ Ju\ ͡WN!E6 :E/\  H"!6 :ր:E/H*&  ~!E6*&  ~/!6 :E/*&  ~/H**M! 2:<2::E/H*&  ~0*))))  w*M! 2!6 : :E/H*&  ~ H*&  >`*& ~{H*&  ~ *)))) *& w*&  *)))) *& w*M! 2:<2i:E/\ 5*))))  } u*))))  #~ u*))))  N#F *))))  q#p*))))  :w*#"*! p> ͭ:<2>+s#r>:E/H\ 2vN*" *! *)))) u *"*M! 2þâ%:<2 u͑lF2F͑\ 2NfuF2! "*+!*))))  :d*))))  q#p *"҇! ":=!6!ͣ DM% )2͑F2F͑\ 2N *"| u\ 2!E6 :E/! "*":E/>!HҴ!ͣ DM%\  ʝ!E6ñ>+s#r*#"d! "*+!!ͣ DM% 2͑\ 2N *"ҺP\ 02NC*NBXUX \ ku\ ͡oxN FuF͑F\ 2N%!6 \ 2 :/H:Y$!6è!E6 : !E6F2 ͼ":E/ҽ! "*":E/>!H]!ͣ DM%\  F!E6Z>+s#r*#" ! "*+!ں!ͣ DM%F ʭF2F͑\ 2N *"c\  NFF͑NX! "}22:)<2: ,:) ! "#**"! "1!6*"! ":/G*)))) ~$^!6D*))))  :!:/Ұ!6,V 2:›0XáCX,V 2X**0& p> ͭ,V 2 H!6 > !*&  6 :<2!6$ *)))) DMuX*#"=*))))  ~!=!6*#"=:],V 2X %!6 #6 !6 #6 ! ":/:/HҼ*)))) ~$ʴ*))))  :)<{ *)& ͏x *)))) ͛2: q *))))  *)& ͏x u:)<2):/:)2!6>!)n&  ͏x ~ H *)& ͏x ~[Hb!6!6n*#"!6 x*#"ñ:Ҫ*))))  :Ң*#"ç!6ñ*#"ù!6z:**#"**))))  DM} u*))))  #DM~ u! 6 *))))  ~2D*))))  ~2):!q!6 !::E/Hҙ,V 2E:E/Җ!6 :!{X:<2a *& ͏x DMX:<27 H*)M.:E/ҷ,V 2E:E/\  \ 2DN!6 :/:E/H\  H:D=2:<2O>/:/H *&  ~29!E6!6 :/:E/H:*&  ~/HHҗ:<2*M! 2*&  :=O ! w>:§!6ò*&  6$:E/:/H: :@/H,V 2E*MH> !X!6 !D6 !E6  u,V 2X h* &  6 !,6ͷ 2: :?/H_1X:_ ogDM! >))덑o|g҉ =wDM! >))Ҟ =–^#V) §_ {ozgi`N#Fogo& og_ {_z#W $  ~w :&/3͖!~6 :~w ucy! ʎB d{<ʑ  '*2.2+6.w 1"  CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321͈͋> (12/06/82) CP/M 3 PIP VERS 3.0 DISK READ$DISK WRITE$VERIFY$INVALID DESTINATION$INVALID SOURCE$USER ABORTED$BAD PARAMETER$INVALID USER NUMBER$INVALID FORMAT$HEX RECORD CHECKSUM$FILE NOT FOUND$START NOT FOUND$QUIT NOT FOUND$INVALID HEX DIGIT$CLOSE FILE$UNEXPECTED END OF HEX FILE$INVALID SEPARATOR$NO DIRECTORY SPACE$INVALID FORMAT WITH SPARCE FILE$MAKE FILE$OPEN FILE$PRINTER BUSY$CAN'T DELETE TEMP FILE$ *5<P_lz)<\fp}NO DIRECTORY SPACE$NO DATA BLOCK$CAN'T CLOSE CURRENT EXTENT$SEEK TO UNWRITTEN EXTENT$RANDOM RECORD OUT OF RANGE$RECORDS DON'T MATCH$RECORD LOCKED$INVALID FILENAME$FCB CHECKSUM$2FTe$NONRECOVERABLE$R/O DISK$R/O FILE$INVALID DISK SELECT$INCOMPATIBLE MODE$INVALID PASSWORD$ALREADY EXISTS$LIMIT EXCEEDED$eT              =.:;,<> _[]OUTPRNLSTAXO AUXCONAXIINPNULEOF ERROR: $ - $$$$DESTINATION IS R/O, DELETE (Y/N)? $**NOT DELETED**$COPYING -$ (Y/N)? $REQUIRES CP/M 3$CP/M 3 PIP VERSION 3.0$:"Q }#( :}# 2m#}1͖ -  m :m#8ͺk 2#2 $M 2"!\#6!z#6 :z# b:m#2}#!$6 +6 +6 !o#6 !"6 ! "_#"X#}2d#2g#2h#2c#2z#!n#6!e#6#6!j#6!"6:m#ҹ*ͨͺ!#6:}# ͑ ͖%#:d#%# :p#=:p#_HH ":S# N:"H ͵!S#6:d#<"$\ ( K"#&#( Az:S#:" H҃͵!"6&#,"( Az>!S#Ҕͥ z:S#ʡ!e#6 :j#z!f#6:p#,:p# Hͥ :p#,2j#!c#w:S#!$6:$ !$6:$ !$6:"> !"H!d#"ͥ :"/!f#6 :" T!f#6 >'!f#Q !f#4<g:" dgA2:j#w"á:m#2}#b! $p+q*$}2{#|2x#     !!$q:!$_   ͨ ͨ!#$p+q*"$  !%$p+qͺ*$$DM!|#6|#     !'$p+q*&$ !)$p+q$ *($ DM!+$p+q**$DM **$ DM̈́:{# **$ ~Hi **$ !{#6!x#6 !-$p+q*,$ DM̈́!/$p+q*.$ DM̈́  DM̈́!1$p+q*0$DM *0$ DM̈́!3$p+q*2$ DM̈́!5$p+q*4$ DM̈́!7$p+q$ *6$ ~  *6$ >w!  *6$ >w$ *6$ DM*6$ DM̈́!9$p+q*8$DM *8$ DM̈́  !;$p+q*:$ DM̈́   !<$q!<$: $ʐ :<$2 $_   *#Mt *R#Mt *"Mt !>$p+q*=$! DM̈́:{#!@$p+q*?$" DM̈́:{#!B$p+q*A$# !D$p+q*C$$ !E$q!E$:\# :E$2\#_ ,  0   !J$s+p+q+p+q:J$=2J$^ *F$*H$ w*F$#"F$*H$#"H$7  !z#6 :h#~ ͡ "j !h#6 :g#Ҕ ͙ "j "͢ !}#6 !"6l!K$q_ *K$& ) N#Fͺ !N$r+s+q:{#2Q$:x#2R$_ :L$:Q$H !R$6 :R$2R$*L$&  N ! N#F> !L$~H:Q$H> !Q$/H^  ͨ:Q$=O !r N#F!R$6 :R$ {  ͨ*R$& ) N#Ft> M$H" *M$~A=Oͨ:ͨ!P$6> !P$ *P$& *M$>2O$ :P$ .ͨ*O$Mͨ!P$4¢ ͺ:Q$:Q$H:Q$H:Q$H :d#2z#D :R$>!R$~ HH> HD :d#2z# ͥ    m   m ͥ !V#:"{ > !V#:"© !U#:"Ғ > !U#:"© !T#:"ҩ > >͙ %#-"( x"( :+#2+#%#! :{#2y# %#j :x# %# "͢ :{#:x# H!" " :{#L:x# D" L" !#6 !g#6͡ :"2""! :{#u!h#6:$/:"HҊ!{#6:{#¯:x# §" ï" :"2r#:"2s#:"2t#:"2u#:"2v#:"2w#" 2{#"T#( !"6 #6 #6 #6 !"]#:g#ͬ !_#!"Y$> '")! "W$͙ :k#!l#we *W$$ DM" b" k" :a#Ҁ! @"Z# Ë! "Z# W$Y$;">'"W$Y$;"! @*"!a#W$Y$;""Z#!Z#"}O *W$$ DM" :{# " *Z#*W$"W$Ë:$ң ! "W$  Y$W$;"ҝ"ͩ 2V$*##"#> '"G!#4!U$6 :U$ր!V$ҁ*U$&  :U$W$!$ 2V$!U$4L *W$"W$:V$ښ" "Ϳ " *W$$ W$_#;"+s#r{_$( N :a#! @"Z# ! "Z# ͡ *X#"]#X#";">COMMANDS CONVENTIONS  3CNTRLCHARS  COPYSYS & VCPNET ( eEXTENSIONS , @NDOS3 3 5CPNETSTS 6 DATE = YEXAMPLES ? (DEVICE A /OPTIONS F yEXAMPLES L DIR V IBUILT-IN Y KEXAMPLES ] WITHOPTIONS e OPTIONS h sEXAMPLES y _DRIVES DSKRESET DUMP UED COMMANDS {EXAMPLES /ERASE 1OPTION 4EXAMPLES 0FILESPEC MGENCOM )OPTIONS \EXAMPLES @GET UOPTIONS 9EXAMPLES [HELP .HEXCOM INITDIR bLIB nOPTIONS MODIFIERS nEXAMPLES {LINK ROPTIONS 3EXAMPLES ZLOCAL "YLOGIN %ALOGOFF +7MAC .7EXAMPLES 3 OPTIONS 3HMODE > NETSTAT F]NETWORK IRNTPDATE O#PATCH QHPIP (COPY) T.EXAMPLES [!OPTIONS bPUT kOPTIONS q8EXAMPLES zRENAME $EXAMPLES RMAC aOPTIONS =EXAMPLE GRSXRM fSAVE LEXAMPLE pSET ZLABEL 1EXAMPLES <PASSWORDS 4MODES uATTRIBUTES xEXAMPLES pDEFAULT +TIME-STAMPS WOPTIONS EXAMPLES 0DRIVES SETDEF EXAMPLES ?SHOW )EXAMPLES BSID TCOMMANDS 4EXAMPLES 7UTILITIES GSUBMIT SUBFILE qEXECUTE \PROFILE.SUB \TPA {TR TYPE "EXAMPLES &!USER (#EXAMPLES *4XREF +o$ $ $ ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all ch1 ü CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321 ERROR: Not renamed, $ ERROR: Drive read only.$Invalid wildcard.$ERROR: No such file to rename.$ Disk I/O.$Currently Opened.$Bad password.$file already exists$Enter password: $, delete (Y/N)?$ERROR: Invalid File. $Requires CP/M 3.0$Enter New Name: $ ERROR: Incorrect file specification. $Enter Old Name: $1 1 q"6 *6 }0*6 |H\7   ! " !\ " "  ͫ  " B ̈́ ùn7( G29 > !9 E7   ! 6 *9 &  ": )7*: DM(G29 )*: 6 *: #": *: 6=:9 : 2 #+s#r*: 6 ! " !\ " "  " B ʹ̈́  N o :\ : ! :\ o * ~2 J  .    v    ! q* &  ! p+q*   ! s+p+q* : w*   * #" ~      ! p+q*    ! p+q*  ! p+q*  ! p+q*  ! q* & - ! q: 2 ! 6  1 ! q: 2 ! 6  1 ! r+s+q: 2 ! 6* #s#r 1  ' '! s+q+p+q: =2 ^* : w* #" A! q: y7   : 7   : ¥7   : ³7: 7: 7: 7: 7   ! p+q! 6> ! -: .'* & * >O'! 4! p+q. * * DM -E ͳ* DMͣ"  * }‹* |2 : ҇* M_: >! q: aڨ: {Ҩ: : )#7  4! 6 >! CO͎2 * &  : w: )C: õ: ): õ: =2 O ! 6 : 9   : <2 h2 ! 6 +6> ! ڠ* &  ~?–* & * ~?ʑ77   Ö! 6: <2 R: ! p+q* : w!! 6> !! *! &  ~?*! & * *! & *  w:! <2! ¶ ͳ z2#  _:# M :# o&  "$ E"& G"( I"*  ", ". "0 *$ DMͤ*$ DM.2" Ÿ* DMN 47O͎Yœ* DM͓*$ DM.2" ß:" ½*$ DMN ͬ*$ DM.2" :" *$ DMN )* DM='*$ DM ͳ*& E*( G** I*,  *. *0 !(  Y D .*(  -< ͊2# !3 p+q7*2 DM '*" M_7D7   * #" ! "  " .  -¢ !5 p+q*4 ~ *4 ~ H *4 #"4 ñ *4 ~ > >! `i^#V#~#fo"  yˆ w7 G:4 xAڈ ҈ a{ _È  . . " _ og_ {ozgi`N#Fog_ {_z#W  w w ww zwzw zwzw FG zzz *w#"w*w"w:yog#"w*xw*w< :y<2y:w2y:yog:yog*w+"w*y4nS ^#V"y*7C ~og*w *y~og)))))~og<*y"y!y 2y:y:wog#>og^"w*w <:wog"w*~w:yog `;*w*w)))))*w `;>GA;*~w:yog `;~*w+*w)))))*w `;w!w6P^#V"yR;%!-DB$!E>;!*y;!!E>;!@RL%>B'@(^#V"yR%>B'*y;%!-E> ;%@%*!w;@!7Ewx͛:!8Ewx͛:>m2y:w2y:yog:yogog^|*w:; PUTSYS for WD1002 with ST412, CP/M 2.2u and "Universal" ROM series 2.0 ; DO NOT USE for older ROM! (maybe it will work...) ; TODO: check ROM and abort... bdos equ 5 ; BDOS functions msgout equ 9 org 00100h start: mvi c,msgout lxi d,signon call bdos lda sysimg cpi 018h ; JR opcode jnz error lda sysimg+1 cpi 0feh ; "JR $" operand jnz error lhld nrec lxi d,003ch ora a dsbc d jnc error call setcks lhld nrec lxi d,3 dad d srlr h rarr l srlr h rarr l ; /4 128->512 blocks inx h ; +1 for boot params sector shld nsec call home lxi h,0 xra a shld track sta sector lxi h,sysimg mvi a,0 trk0: shld bufptr sta sector push psw call write lda nsec dcr a sta nsec jrz done lhld bufptr lxi d,512 dad d pop psw inr a jr trk0 ; finish track done: ret setcks: lxi h,sysimg lxi d,0 lxi b,510 setck0: mov a,e add m mov e,a mod a,d aci 0 mov d,a inx h dcx b mov a,b ora c jrnz setck0 xchg shld cksum ret write: call setlba call wrsec rz mvi c,msgout lxi d,l016dh ; write fault call bdos die: jmp die l016dh: db 13,10,'DISK WRITE FAULT',13,10,'$' setlba: lda track mvi c,a call setcyl lda sector mvi c,a call setsec ret home: call setsdh mvi a,011h ; RESTORE out 087h call getbsy xra a out 084h out 085h mvi a,070h ; SEEK out 087h getbsy: in 087h bit 7,a jrnz getbsy ret setcyl: lhld track ; track srlr h rarr l mvi a,l out 084h mvi a,h out 085h ret setsec: mvi a,c out 083h ; sector ret setsdh: in 014h ani 11111101b ; RESET ori 000h out 014h lda track ; head (track LSB) ani 001h ori 0a8h out 086h ; SDH ret wrsec: call setsdh in 084h out 084h lxi b,0080h ; '00' for 256, '80' for data port lhld bufptr mvi a,030h ; WRITE out 087h otir otir call getbsy ani 001h ret signon: db 13,10,'PUTSYS VER 2.0u',13,10,'$' track: dw 0 sector: dw 0 bufptr: dw 0 nsec: dw 0 org 0900h ; This is where MOVCPM, SYSGEN, etc. ; leave the system image. sysimg: ds 2 ; "JR $" ccp: ds 2 entry: ds 2 nrec: ds 2 ds 502 ; cksum: ds 2 ; end of 512-byte sector ; rest of system image follows... end B INX H ; point to the next byte POP PSW ; get counter DCR A ; and decrement it JNZ ANOTHR POP H ; restore pointer MVI B,4 LDED MODPTR ; actual mode byte pointer UPONE: MOV A,M ; if all's well, let's actually update STAX D ; the mode byte INX H INX D DJNZ UPONE RET ; and return serdp LXI D,MINFO ; MODE BYTE POINTER TO DE LHLD sysadr ; call serdp LXI B,?SERDP-3 DAD B ; POINTER TO SERDP CALL ADDRESS CALL HLIHL ; GET CALL ADDRESS push h CALL ICALL ; CALL "GETDP" TO FIND A DPB FOR THIS MODE pop d ; add start of serdp to hl to get start of dad d ; format string table ret ; output the mode data to the CRT ; A pointer to the mode data is passed in the HL ; MPRINT: LDA DRVNUM ; get physical drive number LXI B,0 ; tens counter in C and ones in B MORTEN: INR C SUI 10 JZ GOTNUM JP MORTEN DCR C ADI 10 MOV B,A GOTNUM: LXI H,3030H ; numeric offset to ASCII DAD B MOV A,L ; tens digit CPI '0' ; check for zero JNZ NOZE MVI A,' ' ; if so, replace with a space NOZE: MOV L,A SHLD DSKNM LXI D,TTLE1 LDA NEWARG ; was configuration changed ORA A ; zero if not changed JZ TYPNC LXI D,TTLE0 TYPNC: MVI C,TYPE CALL BDOS LXI D,DRSTR ; drive letter and number message MVI C,TYPE CALL BDOS LHLD MODPTR ; pointer to system mode byte PUSH H ; save the mode pointer BIT 7,M ; check validity JNZ DONE ; non-zero if hard disk inx h inx h BIT 7,M ; size, 0=5" and 1=8" LXI D,INCH5 JZ PRINCH LXI D,INCH8 PRINCH: MVI C,TYPE CALL BDOS LXI D,CTRMSG MVI C,TYPE CALL BDOS CALL GETTXT ; get text string pointer in DE MVI C,TYPE CALL BDOS call crlf POP H PUSH H ; get mode address again inx h inx h INX H ; point to byte 2 BIT 4,M JZ SD ; single density if zero LXI D,DDMSG ; double density drive message JMP DD SD: LXI D,SDMSG ; single density drive message DD: MVI C,TYPE CALL BDOS POP H PUSH H inx h inx h inx h BIT 6,M ; check the side bit JZ SS ; single sided if zero LXI D,DSMSG ; double sided drive message JMP DDS SS: LXI D,SSMSG ; single sided drive message DDS: MVI C,TYPE CALL BDOS POP H PUSH H ; get mode address again inx h inx h INX H bit 5,m ; bit set if 96 tpi JNZ T96 dcx h bit 5,m ;check for drive "DT" inx h jz t48 LXI D,HALFTK ; half track message JMP HTRK T48: LXI D,T48MSG ; 48 tpi message JMP HTRK T96: LXI D,T96MSG ; 96 tpi message HTRK: MVI C,TYPE CALL BDOS POP H ; get pointer again PUSH H INX H ; point to second byte inx h MOV A,M ; and get it ANI 00001100b ; bits for step rate bit 7,m jrz sr00 setb 4,a sr00: LXI H,STRTBL ; step rate table rrc ; MOV E,A MVI D,0 ; 16 bit value for offset DAD D MOV E,M ; first byte of step rate INX H MOV D,M ; and the second XCHG SHLD STRATE ; save text in message LXI D,STRMSG ; step rate message MVI C,TYPE CALL BDOS LXI D,STRATE LDA STRATE CPI ' ' ; skip a character if a space JNZ NSPC INX D NSPC: MVI C,TYPE CALL BDOS lxi d,fmtstr mvi c,type call bdos POP H ; get pointer to format origin bytes mov d,m ; load bytes in de inx h mov e,m push d call serdp ; get start of format string table in hl pop d lxi b,8 xra a fmt1: srlr d rarr e ;shift and wait for a carry... jrc fmt2 dad b jr fmt1 fmt2: mvi b,8 fmt3: mov e,m ; got format string - now print 8 characters push h push b ; hl = string start mvi c,conout call bdos pop b pop h inx h djnz fmt3 call crlf ret ; this function puts the mode byte at MINFO and ; returns a pointer to it in the HL. It also places ; pointers to the actual mode byte and mask in ; MODPTR and MSKPTR and the drive number in DRVNUM ; GETMOD: LDA NDRIVE ; get logical drive number LHLD sysadr ; address of BIOS LXI D,lptbl-3 ; offset to POINTER TO mixer table DAD D CALL HLIHL ; MIXER TABLE MOV E,A ; use logical drive number as offset MVI D,0 ; into logical/physical table DAD D MOV A,M ; get physical dri 6231 = vers equ '1b' ; March 11, 2017 21:34 drm "MBIOS3KP.ASM" ;**************************************************************** ; Main BIOS module for CP/M 3 (CP/M plus) on the KAYPRO computer* ; Copyright (c) 1985 Douglas Miller * ;**************************************************************** maclib Z80 FFFF = true equ -1 0000 = false equ not true 0038 = bnksiz equ 56 ;size of banks, in "K". Either 48 or 56. 00E0 = compag equ bnksiz*4 ; C0 or E0, for MMU common page select E000 = bnktop equ compag shl 8 ;C000 or E000 000D = cr equ 13 000A = lf equ 10 0007 = bell equ 7 0000 = cpm equ 0 0005 = bdos equ 5 0100 = ccp equ 0100h ; Console Command Processor gets loaded into the TPA ; SCB registers extrn @covec,@civec,@aovec,@aivec,@lovec,@ermde extrn @mxtpa,@sec,@min,@hour,@date extrn @lptbl ; External routines extrn ?getdp,?serdp ; Variables for use by other modules public @adrv,@pdrv,@rdrv,@side,@trk,@sect,@login public @dma,@dbnk,@cnt,@scrbf,@dtacb,@dircb public @dstat,@cmode,@dph,@rcnfg public @ctbl,@cbnk,bnkdos,resdos,wbtrap public @vect,sio1vec,sio2vec,piovec ; Routines for use by other modules public ?timot public ?dvtbl,?drtbl public ?bnksl,?stbnk public ?halloc ********************************************************* ** I/O port base addresses ********************************************************* 0004 = sio1 equ 004h ;z80-sio/0 000C = sio2 equ 00ch ; " 0020 = pio equ 020h ;modem and rtc functions 0024 = rtc equ 024h ;real-time clock 0010 = fdc equ 010h ;floppy disk controller 003F = mmu equ 03fh ;memory management 0014 = sysctl equ 014h ;system control (and floppy disk control bits) ********************************************************* ** SIO's ********************************************************* 0004 = sio1datA equ sio1+0 0006 = sio1ctlA equ sio1datA+2 0005 = sio1datB equ sio1+1 0007 = sio1ctlB equ sio1datB+2 000C = sio2datA equ sio2+0 000E = sio2ctlA equ sio2datA+2 000D = sio2datB equ sio2+1 000F = sio2ctlB equ sio2datB+2 ********************************************************* ** PIO ********************************************************* 0020 = pioAdat equ pio+0 0022 = pioActl equ pioAdat+2 0021 = pioBdat equ pio+1 0023 = pioBctl equ pioBdat+2 ********************************************************* ** RTC (MM58167 Real-Time Clock) ********************************************************* 0024 = RTCDTA equ RTC 0020 = RTCADR equ pioAdat 0002 = RTCSEC equ 2 0003 = RTCMIN equ 3 0004 = RTCHRS equ 4 0005 = RTCDAY equ 5 0006 = RTCDAT equ 6 0007 = RTCMON equ 7 000A = lastmon equ 10 ;month last accessed (used to detect year change) 0008 = rtcyrs equ 8 ;years (decade) 0009 = rtcent equ 9 ;century 0012 = clrcnt equ 18 0014 = rtcsts equ 20 0010 = rtcis equ 16 ;interupt status 0011 = rtcic equ 17 ;interupt control 0002 = hbnk equ 2 ;bank to use for Hash tables. 0100 = hstart equ 100h ;reserve page 0 for interupt vectors, etc. 0DF0 = hsize equ (bnktop-hstart)/16 ;allocate space equally to each drive. ;-------- Start of Code-producing source ----------- cseg ; GENCPM puts CSEG stuff in common memory 0000 = BIOS$0 equ $ FC00 = bnkdos equ bios$0+0fc00h ;dummy values, reloc "Fxxx", GENCPM will FD00 = resdos equ bios$0+0fd00h ; substitiute real values. 0000 C30600 jmp boot ; initial entry on cold start 0003 C3C400 jmp wboot ; reentry on program exit, warm start 0006 C32A02 jmp const ; return console input status 0009 C35302 jmp conin ; return console input character 000C C36D02 jmp conout ; send console output character 000F C37702 jmp list ; send list output character 0012 C37202 jmp auxout ; send auxilliary output character 0015 C35802 jmp auxin ; return auxilliary input character 0018 C33805 jmp home ; set disks to logical home 001B C32304 jmp seldsk ; select disk drive, return disk parameter info 001E C33B05 jmp settrk ; set disk track 0021 C34005 jmp setsec ; set disk sector 0024 C34505 jmp setdma ; set disk I/O memory address 0027 C35C05 jmp read ; read physical block(s) 002A C36105 jmp write ; write physical block(s) 002D C39C02 jmp listst ; return list device status 0030 C35005 jmp sectrn ; translate logical to physical sector 0033 C39202 jmp conost ; return console output status 0036 C32F02 jmp auxist ; return aux input status 0039 C39702 jmp auxost ; return aux output status 003C C3AF01 ?dvtbl: jmp devtbl ; return address of device def table 003F C31702 jmp cinit ; change baud rate of device 0042 C3E603 ?drtbl: jmp getdrv ; return address of disk drive table 0045 C3ED05 jmp multio ; set multiple record count for disk I/O 0048 C3F105 jmp flush ; flush BIOS maintained disk caching 004B C32903 movev: jmp move ; block move memory to memory 004E C30903 jmp timex ; Signal Time and Date operation 0051 C3FB02 ?bnksl: jmp bnksel ; select bank for code execution and default DMA 0054 C34C05 ?stbnk: jmp setbnk ; select different bank for disk I/O DMA operations. 0057 C31E03 jmp xmove ; set source and destination banks for one operation 005A C39701 jmp search ; reserved for OEM: search for module. 005D C30000 jmp 0 ; reserved for future expansion 0060 C30000 jmp 0 ; reserved for future expansion 0063 @dstat: ds 1 0064 0000 dw @lptbl ;logical/physical drive table 0066 A603 dw thread ;module thread 0068 0000 dw ?serdp ;test mode validity, HL=memory address of ?serdp 006A @adrv: ds 1 ; currently selected disk drive 006B @pdrv: ds 1 ; physical drive number 006C @rdrv: ds 1 ; module relative disk drive number 006D curmdl: ds 2 ; currently selected Disk I/O module address 006F @cmode: ds 2 0071 @dph: ds 2 0073 0000 @dma: dw 0 0075 0000 wbtrap: dw 0 0077 00 tmpdrv: db 0 0078 00FFFFFF defsrc: db 0,0ffh,0ffh,0ffh 007C 00 srctyp: db 000$00$000b ;only bits 3,4 are used (others ignored) 007D 0040 icivec: dw 0100000000000000b 007F 0080 icovec: dw 1000000000000000b 0081 0000 iaivec: dw 0000000000000000b 0083 0000 iaovec: dw 0000000000000000b 0085 0002 ilovec: dw 0000001000000000b 0087 3E01 goccp: mvi a,1 ;select bank 1 (where CCP is) 0089 CDFB02 call bnksel 008C C30001 jmp ccp ; then exit to ccp 008F 2A0000 bdose: lhld '"X#";"! @*"!a#=X#";"!"Z#!Z#"}O *X#*"DM:"2W#"Ϳ :{# :{#n" :a#҇*x#& "*X#"X#!W#:":"րHҦ!"6 " n /2k#:a#/!c#" "j !h#6 !i#6*X#*"6*Z#*X#"X#![$q:[$ !"4> !$:$!":$1*[$&  *S#M ! ^#V*[$M̈́ø*[$&  ø*[$&  ø*[$&  ø"_#;"ڄ *_#$ :[$w*_##"_#øg*[$&  øAKYgu!\$q:\$ *\$M:$ *\$M:"2]$!$:]$!$:]$2]$!]$:$w> !]$!]$5 :\$ (!"6 !^$q:^$ !$wF ͹O:^$0O͹!_$q:_$O):_$O)!`$6:$2$:$'2$:$ '2$:$ '2$*$MP*$MP*$MP:$¿:͹ ͹ ͹!a$q:$:a$ :n#9:a$ :a$H9:$2b$ (:b$!b$6<:"<2"!b$(!"6  ͹> !$4k!n#6 :a$ F!"6 *a$M͹:a$ Z!n#6!c$q:c$a/>z!c$/H~:c$_2c$:c$!d$q:d$A/>Z!d$/Hҥ:d$ 2d$:d$!f$6*"M !N ^#Vͥ `"]#;" :e#/!b#! "X#]#@" *_#"X#*]#*"~2e$*]##"]#`5!f$6   2e$`  2e$`̀2e$`"5E:f$ҕ:$Ҁ:o#<2o# 2f$Ë:e$ 2f$:f$ҕN :$Ҥ:e$2e$:$ҳ*e$M[: $*e$M͂:e$> !":"=2"> >> !"!"5+N !~# ~2g$!"4ͩ2g$ >> !$;*$Mk8:$2"!$6 :"<2"!"6 g> !$c*$Mk\!$6 !"6> :g$g:g$!h$q:"!h$wO !~# ~2i$—*h$& ~# :g$w>!g$:i$¨!"4í!"6 > 2p#:$X#]#;"!i#:p#!o$6 2j$:j$::j$ :o$" *j$M2j$2j$2l$:j$2k$2j$!l$w:l$ D!o$6I!o$6 : $!o$x:j$::j$Hu2j$T:*k$M*j$M:l$2m$"p$2n$:l$ ʲ!l$52k$Ý " 2j$:j$0O> :j$0:j$AO>" :j$A 2j$OH!m$wO `i""> !$@ ͥ > !$N ͥ *_#} bO2 ͙ "j :{#" :y#:.#:$:{#Y:{#NH{͟O[2{#Ø:{#Yͺ"͢ ͺ:.#2.#:/#2/#%#V %#͢ %##( "0 :&#!r#2&#:'##2'#:(##2(#:)##2)#:-#2-#:.##2.#:/##2/#:0#20#%#V :$}͡ :"2"!"6 "V :b#ڦ!$"" K"!>1"""""$ @""!>1"""""$  """_#;" ! "X#:$/> X#H"H@>X#H"""!r$6 >!r$@:r$"!*"~9:r$"!"X#!r$4:e#!f#2a#!i#6 !b#6 !l#6 +6 !s$6 >!s$ڶ*s$& $ ~ ʯ*s$& $ ~‘!a#6 ï*s$& $ ~¯:e#!f#2b#!a#6 !s$4b~:f#W:a#:i#:c#!i#*X#"_#:j#*X#"_# *_#"X#:k#!i# RG: $!$$5Ͱ5*p#M$:j#!c#G*_#"X#:e#QO͡ "   "ͩ 2{# n Hґ*""#:"2#!i#6 :{#°*"#""> '"­!"4:{# *"!""> '"!"4" f:z# ! "t$"x$͡  !h 6 \  ! "v$:{#t$v$;"H6*v$#"v$͔ :{#]> x$H"R\  : $\ͺ*v$#"t$:{#_ ! #&#( &#"( f#!1#6 !"6 :/#/!$#: $> x$H"!{#6 :{#Y:{#NH':$͟O[2{#!{#6Y*x$#"x$!g#6 :{#Y! $#Aͺ!z$6> !z$e*z$& %# ~2{$ ^:z$ W.ͨ*{$Mͨ!z$4/:$p>͡ !"6?" :{#ʲ:{#_ ! # "( :"ڬ>͔ ~> !":R#!":%#HH :#<2#!}#> *#& ~# N[2p# :p# H !}$p+q. *|$ 6 !p#6 #6 :q#,T:q# A!p#6 N:q#$N!p#6 ͒ )$ *|$ 6 , *|$ 6:"<*|$w*|$ :#w!~$6 >!~$ڗ*~$& $ 6 !~$4|!"6 #6 #6 !q#6 *p#Mc :q#ھ:p#*Ͳ ͒ 2p#ê:p#:¿:q#(*|$#~A<*|$wO>*p#Mc %:p#[ !#5. *|$ 6 ñ:q#1!$6#6 > !$ڰ!$6 :$<2$O>/:$!$O !J *$& *|$ H~G:$¡. *|$ :$w[œ !#5:$2$!$49:p#[¼ _ :q# !q#6+~. 2p#Oc  :q# :p#* Ͳ ͒ !q#6 +~;= 2p#Oc = :q#$ *q#& $ *|$:p#w!q#4 :p#[H !#5. *|$ 6 *|$ 6 å!$q!$6 > !$ڏ *$& > :$ˆ >!$4l > :q#<2q#O *|$ :p#w:p#?± !d#6!$q!p#6?!$:q# ͒ û 2p#:p# :p#]H!:p#A2$O>!:p# !2p#!ͥ !:p#S:p#QHX!:#<2$2p#:p# HO!1!2p#Ü!2p#02$O> r!!$6Ü!2p#02$O> ڜ!*$& !*$& !$sr!*$& $ :$w:$!>!$ҿ!ͥ - *|$ :$w 2p#_ og_ {ozg_ og^#V))) _ {ozg^#V) "^#V|g}o "_ {ozgO {ozgi`N#Fogo& og _ :/{O x*9C# Ⱦ#! i#9w$G:PC8#x+-L#SF#x+L#-SI#>+>-> F$ h#x=b#G#O# #:kCx#ډ#!ZCxO#ډ#$O#'O# £#O#> $Õ# µ#x¯#>$O# ##O#x#>O#='#$x!XC#$#:iC#$:XC> $#>29{!7{K':iC+$!XC+$> 3$> 3$3$26{!4{'!:{Ú=ê$$^$^#Vʃ$a$ͪ$F$#F|$#N|$#^ #r+s#^#V++r+s ~F$5F$$5^$q#pF$O$4~ $_$s#r#s#r#q!$Ú=$$C$ $ Format Overflow *C-& C ![{ .%O:Cy+%! 9G'%~#'%%y.% O:C=% Æ% ͹%F%{N%*iC|w%j& *iC*XC<#<> %> %͹%> %{=>'%! 9ʨ%=~#'¡%{>'%%Ì%{=>'%{>b%*XC++|2{!{'ɯ%>%>2|" |" |`i" |! 9"|!{%[| ~# %*[|~n&*[|~C&!U|>;G3!! !C(!C"i|!g|͋*k&!U|>;G3!R.! !C(!C"m|!k|͋*À&*]|"o|!o|͋*!q|(*a|^#V!aCs#r*c|^#V!cCs#r*_|^#V:|*qC:|G&!u|('*_|^#V}*qC}G&!w|(':C '*_|^#V}*qC}G '!y|(':C''*_|^#V}''!{|('^#V"}|!C"|*}|"|!|͚=2|!|K'^#V"|:CZ':C'*|'*|5!|6 :| ʀ'ͳ'r'a'ò'!|'*|'*|5!`C6 !|':`Cʯ'*|6 Ì'g,2|:|'!C"|! "|!|͚=!XC6#6 !|6 :C'!|'^#V"|!TC"|*|"|!|K1%(!C"|! "|!|͚="((:C(*|~ ?(*XC#"XC(*|~ S(!XC6#6 (:C(*|~ u(*\C#"\C!ZC6#6 (*|~ (*ZC#"ZC!ZC#(!ZC6#6 *ZC*kC#<|(!C"|! "|!|͚=('!`C6"|! 9"|!|(! 9^ |~# (*|^#V| )*| *| r:*| nb5)*| !|>=;O)!|>;*| :!|;*| ~#{)*| ^#V)))|{)*| 6P#6 *| ~#µ)*| ^#V))|)*| 6#6õ)*| 6<#6 *| 6#6 *|6#6 *|6#6 *| 6 *|^#V}4}2|*| ^#V} *!|44*| ^#V}"*>2|*| ^#V}M**| ~#M**| 6#6 *|"|*| "|*|"|!|(0*|^#V|Š**|"|! "|!|͚=^#V^#VOA:Cڨ*!*͚=2CO !C·*6ü* +~#w!C s#r!C4A**C* * I/O Stack Overflow ! 9"|!|*+! 9$> '+%~T]O  ++~+>x^#V"|*|6 ͌+;,T+!C"}! " }!}͚=M,]+^,2 }: }+,ͩ+:|> b€+,Æ+ͩ++>,;,+V,+D,+Ì+V,+: }+^,+,^,++D,+M,+,,é+!`C6 M,+V,+D, ,:|!`Cw,+g,2|*|~!,:|*|#*|~ogw*|4:|:| :|,:| ?:|':`C ‡,!TC"}! }81,! }6Ò,:`C2 }!`C6 : } ڡ,*XC#"XC: } ±,!XC6#6 : }"3" 3*3^#V#"3^#VͿ,,"$3,"(3|,|~Ϳ,,ya -A =.:;<>[]y *"3, -(-,$-,1J- o& ))))\ xH  g-#w g--"-*(3#ʖ-AҖ-G-,:ʛ- 6 à-p4- +4--#,-#*½-6?-w-¬-,---#6 -..- 4-.,.#*-6?.w--,.-.#6 .%#6 .*(3##^ ~?1.# *.xCON CON RDR PUN LST  M !L. ~"-$.-,1ҕ.\ |.l .$.! ~ .-!9.,°. ʾ.-#Ý.x =GÚ.->ɯ*(3+ .^#V.#{#z.6 #6 . r+s!}F#~*/!}6P   eA eA!}^ r+s6 #6 !}4^ N*(3|Z/}=G/.V/R.R/ O>~f/f/>ͨ/N*(3|’/YR.=/y‹/eAÎ/ >~ʞ/=ʞ/>ͨ/q2-3*(3/ "*3./{..**3 *(3#:-3O /.#s#r/../.  è/.r+s{0!'34**3+>|0+ }o͵,Ϳ,~2&3Ϳ,""3,:&3.1[.a0G:&3.1*$3p[04#6 3,:&3|00*3++"3Å0}+ʉ00}|23"3,0"31 F<|.1##"(36*$3s#rv-š2{ ʚ2*(3:&3w060*3"3 <1:&3š20  <ʚ2!1n$' CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321! `i^#V#~#foͽ{¡y#wG:xA##6?)@w){#{s333333. ;;33,;;#wD{_#6 sO O ڹ.:;=,/[]<>a{Ҷ_#  ý Copyright (c) 1982, Digital Research 11/02/82     @      @ NULL0LOADER0SCB   []=, :;<>%\|"()/#!@&+-*?  COMHEXRSX 1 ###~ ERROR: FILE: File not found. No directory space. Invalid file name. First submitted file must be a COM file. Duplicate input RSX... Duplicate RSX in header. Replacing old by new. Invalid RSX type. No more RSX files to be used. Error on copy. There are not enough available RSX slots. Disk read. Disk write. Total file size exceeds 64K. COM file found and NULL option. No header or RSXs to strip. Invalid FCB. Media change occurred. Disk I/O error. Invalid drive error. Invalid SCB offset Missing right parenthesis. Missing SCB value. Missing left parenthesis. Unrecognized option. No modifier for this option. OPTION: This file was not used. GENCOM completed. Requires CP/M 3 or higher. 1n$1n$" %* %|<Ó* %}0HÓ::$]Ç:$jZÇ:$wÇ:$҄ZÇer ͺv!n$q*n$&   ͤ!p$p+q*o$~ *o$Nͤ*o$#"o$    ͤ ͤ     !r$p+q*q$DMͺ     !t$p+q*s$ !v$p+q*u$ !x$p+q*w$ !}$p+q*|$ "y$*y$}2$|2{$!~$q*~$& , 2$!$p+q*$ !$p+q*$ !$p+q*$ !$p+q*$ !$p+q*$ !$q*$& -    !;6 :$!; *;& ') N#F:2$!;4%:2$%ͻ2$!;6>!;S*;& /% 6 !;48!/%6 !;6#6:; *;& *(~ HҞ*;& *(*;& /% w!;4#4`*;& /% 6.!;6 :; *;& *(~ H!;4#N *( *;& /% w!;4î!;p+q3r*;DMͺz/%ͺ!;p+q*;DM *y$}2;|2;:; F   :; T   :;x :;j $ :;x 4 !;q!;6*;& 1 :/• > *;& 1 :;© :;!;4 !;r+s+p+q+p+q !;6 . *;~  *;~2;*;My 2$!;6:$  L :;  *;My 2$ ! . :;2$͌ :;2$2;*;~2;!;6 *;~2;. *;~ L ç *;N ! *;*; =2;!;› !;6!;6:;!;ژ L :;ڑ 6 !;4z Þ 6 *;6 ͌ *;:;w:$$͂#+s#r :$ *$#"$ :L2$:;2;O *; ~2;*;& *;:/( !;4*;:;w*;& *;:; *;& *;~2; *;6 *$~2; :;2;!;6*$#~2;!;4N *; :0f !;6 | *;& *;:;| !;6 !;4N *$ ~2;*;& *$~2;*;My 2$:$:$H:$H:$H !;4N *$ ~2;*;My 2$ä :;2$$͂##+s#r*$Ny 2$!L *$#"$ :$$#+";!;6:$!;P *;Nͤ*;#";!;41 !;p+qr*;DMͺ!;r+s+p+q*;DM͗ *;DM͗ *;~w*;*;~!;p+q*;>9Ұ *;~7w÷ *;~0w!;r+s+q+q*;:;~!;H IQ !;60!$6!;6 *$#"$;+ͱ :; " rͺ :;2 !%6? :;? !%6:$H :$Q :$ˆ :;} rͺ;+ͱ È aͧ !%6:$ ‘ :$š :$£ *$#";*;Ny 2$ *$DM*;i *:& : w*$##"$ *$;i *:& : w*;"$!:4*$Ny 2$\Q *$#"$*$Ny 2$:$ 1*$#"$*$Ny 2$!L:$IY!M:$YwQ *$#"$*$Ny 2$!N*$#"$9*$0͸ *$#";*;Ny 2$!L:$£!M:$°6*$0͸ F*;0͸ *$DM*;i *:& v: w*$##"$2*$;i *:& v: w*;#"$Q !;p+q*;DM*O>0*;"( !;p+q*;DM:O>R*;"( !;p+q*;DMJ2$>!$y*;"(  *( >Š*(DMͻO> ҟ*("(!;p+q*$"%*;"%*$"'%̀"$$#*'"( !;q!;6 >!;*;& )))=% *;& *;&  w!;4!;6 >!;F:;2;*;& ; 6 *;& 6 !;4!;6 > !;ڍ:;2;*;& % *;& ; w*;& *(*;& w!;4K;ͫ2$> !$ҥ*'"(!;p+q!;6 >!!;*;& *;6 !;4±!̓#+s#r!<5&* <$T :{$ ]*(DMZ! #:Q! <#:Q2<* !<ړ*<& * (6 !<4w * (" (!<6*<& ') ^#V"(x*(DM͋2$!)"<*<*<& $) N#Fq#px*(DM͋2$:) !)6*<& 9 :)w!)6!)6!)6 %͛2$! "$$*$*$"$!<4:$GT*<$#ã!!<ڸ*<& : 6!<4!\"<$w#s#r!n"<$w#s#r.:[ -!<6> !:H!<6 ::=!! !%( z:$/H! "$$#͞%U!$6 ̓!"<6 :"<#ڀ*"<& ( 6 :"<<2"<_!"<6 :$!"<ک*"<& $) > w#6 :"<<2"<…!(" (* (:Ow:%/ * ( :Ow * ( 6 * ( :$w! "$:%:O2)x* (DM%͛2$> !$!%"( ):%/i:$R%͛2$*("(! "$$fx%͛2$! "$o! "$*$*$"$/!##"$*$DM*# w#6 !)" (%͛2$* (##"*<**!(<ڋ*&<& )))9 *(<& *'<& )))9 *(<& w:(<<2(!(!%< *%<&  * (*$<& )))9 *%<& w:%<<2%<!)" (!$6 !,<6:$!,<*,<& $ 6 !-<6:$!-<ں*-<& ') ^#V"(!.<6 >!.<ڑ*.<&  * (*.<&  *(ʇð:.<<2. !$:$_!)" (!,<6:$!,<r:,<<2,<* (#^#V"0<:$5~ *( 6 x*(DM͋2$!0<#"$%͛2$*$DM i*0<"$/>> !)" ( * ( ~2$ ʃ҃ * ( :$* ( w*("( * ( >Ҭf %͛2$:$ ~! "$$! "$$#*$"$*(DM1͞%U̓!)" (*("(! "$:%N:%/!$N!)6 *( 6 *(DM͛2$:$ H ! "$:%1:$d~õ:$ʚ x*(DMZ:$ʚ:{$$͂#+s#r*(DMZy:{$$͂#+s#r!$#+s#r*(DMU:$/1*(DM1x*(DMͦ*(DM*(DM͋2$.)$ -:% !)6:O2) *( 6 *(DM͛2$:$ 1 *(DM1! "$!3<6 > $#_"*(DM͠*$~[h *( ~25<> !5<!6<6!4<6 :5<=!4<*6<& *(*3<& )))=% *4<& w:6<<26<:4<<24<†*3<& % :5 !%* *(DM*O>S:%/P o:%o *( >o :% :$<2$23<! *3<& ͮ#% *3<& ') q#p!4<6 :$=!4< !5<6 > !5<:3<=o& ! ͮ#% *5<& ! *3<& ͮ#% *5<& w:5<<25<³:3<=23<:4<<24<£R"*'"(X"> !$҉!!$6 !3<6:$!3< !*3<& ') ^#V"(X#/b 'Ͳ"!*3<& % > x *3!$Ҙ Ͳ"!:3<<24<:$!4<!*4<& ') ^#V"'!6<6>!6< *6<& *(*6<& *' :6<<26<¿ Ͳ":4<<24<Ÿ :3<<23<0 !$:$ !9!3<6 !$:3<҄!*3<& $ ~24<:$=2$:4<26<:$!6!$ҹ! !O:) ":$!!$6!:%!%!!$6!!$6:)"!$6.;) -!2":$"!$62":%!%,"!$62" :"!$6:$/^"%ͦ%ͻ2$*(~2%%S! *3<& ͮ#% "(*3<& ') q#p!4<6 > !4<ڱ"! *3<& ͮ#% *4<& 6 :4<<24<…" *$& $ :3 !6<#*5<& *7<*6<& *( w:5<<25<:6<<26<"!: !6 :5<<25<:6<<26<:#>i`N#Fog_ ogDM! >))덑o|gҨ# =–#DM! >))ҽ# =µ#^#V) #^#V|g}o #O {ozgi`N#Fogo& og_ {_z#W @mxtpa 0092 CDFA02 call icall 0095 AF xra a 0096 CDFB02 call bnksel 0099 7D mov a,l 009A 44 mov b,h 009B C9 ret 009C # @@ set ($-BIOS$0) if (@@ and 0fh) ne 0 009C ds 16-(@@ and 0fh) endif ;put vectors on req. boundary, xxxxx000x for SIOs ; and xxxxxxx0 for PIO. @vect: sio1vec: 00A0 3001 dw nullsio ; chB TxE 00A2 3001 dw nullsio ; Ext/Sts 00A4 3001 dw nullsio ; RxA 00A6 3001 dw nullsio ; Spcl 00A8 3001 dw nullsio ; chA TxE 00AA 3001 dw nullsio ; Ext/Sts 00AC 3001 dw nullsio ; RxA 00AE 3001 dw nullsio ; Spcl sio2vec: 00B0 3001 dw nullsio ; chB TxE 00B2 3001 dw nullsio ; Ext/Sts 00B4 3001 dw nullsio ; RxA 00B6 3001 dw nullsio ; Spcl 00B8 3001 dw nullsio ; chA TxE 00BA 3001 dw nullsio ; Ext/Sts 00BC 3001 dw nullsio ; RxA 00BE 3001 dw nullsio ; Spcl piovec: 00C0 3001 dw nullpio ;ch A 00C2 3001 dw nullpio ;ch B 00A0 # @v set @vect-BIOS$0 00C4 # @@ set $-BIOS$0 if (@v shr 8) ne (@@ shr 8) ds 'Vect X page bound' endif 00C4 310E01 wboot: lxi sp,stack 00C7 AF xra a 00C8 CDFB02 call bnksel 00CB C35201 jmp wboot1 00CE ds 64 010E = stack equ $ 010E ds 32 012E = iostk equ $ 012E 0000 iostkp: dw $-$ nullsio: nullpio: 0130 FB ei reti 0131+ED4D DB 0EDH,4DH 0133 ds 16 ;8 levels of stack 0143 intstk: ds 0 0143 0000 istk: dw 0 tick: sspd istk 0145+ED73 DB 0EDH,73H 0147+4301 DW ISTK 0149 314301 lxi sp,intstk 014C F5 push psw 014D E5 push h 014E C5 push b 014F 210000 lxi h,@sec 0152 34 inr m 0153 219E03 lxi h,tictbl 0156 0602 mvi b,numtic 0158 7E to4: mov a,m 0159 23 inx h 015A FEFF cpi true 015C CA7C01 jz to3 015F 7E mov a,m 0160 B7 ora a jrz to5 0161+2815 DB 28H,TO5-$-1 0163 35 dcr m jrnz to3 0164+2016 DB 20H,TO3-$-1 0166 C5 push b 0167 D5 push d 0168 E5 push h 0169 23 inx h 016A 7E mov a,m 016B 23 inx h 016C 66 mov h,m 016D 6F mov l,a 016E CDFA02 call icall 0171 E1 pop h 0172 D1 pop d 0173 C1 pop b 0174 7E mov a,m 0175 B7 ora a jrnz to3 0176+2004 DB 20H,TO3-$-1 0178 2B to5: dcx h 0179 36FF mvi m,true 017B 23 inx h 017C 23 to3: inx h 017D 23 inx h 017E 23 inx h djnz to4 017F+10D7 DB 10H,TO4-$-1 too3: 0181 0E20 mvi c,rtcadr inp b ;save existing rtcadr 0183+ED40 DB 0EDH,B*8+40H 0185 3E10 mvi a,rtcis ;clear rtc INT flag outp a ; 0187+ED79 DB 0EDH,A*8+41H 0189 DB24 in rtcdta ; outp b ;restore rtcadr 018B+ED41 DB 0EDH,B*8+41H 018D C1 pop b 018E E1 pop h 018F F1 pop psw lspd istk 0190+ED7B DB 0EDH,07BH 0192+4301 DW ISTK 0194 FB ei reti ;resets PIO interupt 0195+ED4D DB 0EDH,4DH ; SEARCH for a module by device #. ; entry: C = device # (0-249) ; exit: [CY] = not found ; else HL=module address ("init" entry) ; A=device number (relative to module's #0) ; 0197 11A603 search: lxi d,thread ;C=device number 019A EB snext: xchg 019B 5E mov e,m 019C 23 inx h 019D 56 mov d,m 019E 23 inx h 019F 7A mov a,d 01A0 B3 ora e 01A1 D601 sui 1 ;produce [CY] if DE=0000 01A3 D8 rc ;return if device not found, DE=0000 01A4 79 mov a,c 01A5 96 sub m jrc snext 01A6+38F2 DB 38H,SNEXT-$-1 01A8 23 inx h 01A9 BE cmp m jrnc snext 01AA+30EE DB 30H,SNEXT-$-1 01AC 23 inx h ;point to "init" vector 01AD B7 ora a ;set [NC] condition 01AE C9 ret 01AF 21B301 devtbl: lxi h,@ctbl 01B2 C9 ret 01B3 6E6F646576@ctbl: db 'nodev ',0,0 ;character table, filled at cold-start. 01BB 6E6F646576 db 'nodev ',0,0 01C3 6E6F646576 db 'nodev ',0,0 01CB 6E6F646576 db 'nodev ',0,0 01D3 6E6F646576 db 'nodev ',0,0 01DB 6E6F646576 db 'nodev ',0,0 01E3 6E6F646576 db 'nodev ',0,0 01EB 6E6F646576 db 'nodev ',0,0 01F3 00 db 0 ;table terminator cdtbl: rept 8 ;character device table, filled at cold-start. dw cnull endm 01F4+0402 DW CNULL 01F6+0402 DW CNULL 01F8+0402 DW CNULL 01FA+0402 DW CNULL 01FC+0402 DW CNULL 01FE+0402 DW CNULL 0200+0402 DW CNULL 0202+0402 DW CNULL 0204 C31602 cnull: jmp null ;init 0207 C31302 jmp nulli ;input status 020A C31302 jmp nulli ;input 020D C31302 jmp nulli ;output status 0210 C31602 jmp null ;output 0213 3E1A nulli: mvi a,1ah ;E.O.F. character, also [NZ] to be always ready. 0215 B7 ora a ;sets [NZ] condition. 0216 C9 null: ret 0217 0600 cinit: mvi b,0 ;C=device number (0-11) bit 3,c ;devices 8-11? 0219+CB59 DB 0CBH,3*8+C+40H 021B C0 rnz ;cannot init those 021C 0600 mvi b,0 ;C=device number (0-7) slar c ;*2 for table index 021E+CB21 DB 0CBH,20H+C 0220 21F401 lxi h,cdtbl 0223 09 dad b 0224 5E mov e,m 0225 23 inx h 0226 56 mov d,m 0227 41 mov b,c 0228 EB xchg 0229 E9 pchl ;jump to modules "init" with B=device # const: 022A 2A0000 lhld @civec ; get console input bit vector jr ist$scan0 022D+1803 DB 18H,IST$SCAN0-$-1 auxist: 022F 2A0000 lhld @aivec ; get aux input bit vector ist$scan0: 0232 CDC902 call swtosys 0235 11BA02 lxi d,xitusr 0238 D5 push d ist$scan: 0239 11F401 lxi d,cdtbl 023C 0600 mvi b,0 cis$next: slar h ; check next bit 023E+CB24 DB 0CBH,20H+H 0240 D24A02 jnc is0 0243 3E03 mvi a,3 ; assume device not ready 0245 CDE002 call indjmp1 ; check status for this device 0248 B7C0 ora a ! rnz ; if any ready, return true 024A 13 is0: inx d 024B 13 inx d 024C 04 inr b 024D 7CB7 mov a,h ! ora a ; see if any more selected devices jrnz cis$next 024F+20ED DB 20H,CIS$NEXT-$-1 0251 AF xra a ; all selected were not ready, return false 0252 C9 ret conin: 0253 2A0000 lhld @civec jr in$scan0 0256+1803 DB 18H,IN$SCAN0-$-1 auxin: 0258 2A0000 lhld @aivec in$scan0: 025B CDC902 call swtosys in$scan: 025E E5 push h 025F CD3902 call ist$scan ;see if there is a character ready 0262 E1 pop h 0263 B7 ora a jrz in$scan ;w public @lptbl cseg 0000 323321FF @lptbl: db 50, 51, 33,255 0004 FFFFFFFF db 255,255,255,255 0008 FFFFFFFF db 255,255,255,255 000C FFFFFFFF db 255,255,255,255 0010 end vers equ '0e' ; December 23, 1985 21:38 drm "SERIAL.ASM" ;******************************************************** ; Z80-SIO I/O module for CP/M plus on the KAYPRO * ; Copyright (C) 1985 Douglas Miller * ;******************************************************** maclib Z80 false equ 0 true equ not false dbase equ 200 ;base for all char I/O devices dev0 equ 002 ;first device, rel. to base ndev equ 3 sio1 equ 004h ;z80-sio/0 sio2 equ 00ch ;another sio dce equ sio2+0 ;auxiliary printer dte equ sio1+0 ;terminal equip. modem equ sio2+1 ;modem cseg ;common memory, other parts in banked. dw thread db dbase+dev0,ndev jmp intsio jmp instsio jmp inputsio jmp outstsio jmp outputsio dw strsio dw tblsio dw modsio strsio: db 'KAYPRO ',0,'Z80-SIO handler ',0,'v3.10' dw vers db '$' ; 7=DTR, 6=, 5=CTS, 4=sync 3=DCD : 2=, 1=RTS, 0= modsio: db 00100000b,10100010b,00110100b,dce db 00101000b,10101010b,00110100b,dte db 00101000b,10101010b,00110100b,modem thread equ $ dseg ;banked memory. tblsio: ;initial values only, copied by BIOS to its table. db 'DCE ',00001111b,14 ;I/O, soft-baud, no protocal, 9600 db 'DTE ',00001111b,14 ;I/O, soft-baud, no protocal, 9600 db 'MODEM ',00001011b,6 ;I/O, hard-baud, no protocal, 300 ; all serial vector: mov a,b ;device number sui dev0 add a add a ;*4 mov c,a add a ;*8 mov e,a mvi b,0 mov d,b lxi h,tblsio+6 dad d xchg lxi h,modsio+3 dad b ret intsio: call vector dcx h is1: bit 7,m rnz push d mov a,m ani 00110000b ; bits per char rlc ; -bb----- mov e,a ; Tx image setb 3,e ; Tx Enable rlc ; bb------ ori 00000001b ; Rx Enable mov d,a ; Rx image mov a,m ani 00001111b ori 01000000b ; 16x clock mov b,a ; WR4 image dcx h mov a,m ; ani 10000010b ; DTR, RTS ora e mov e,a ; Tx control, with RTS/DTR inx h inx h mov c,m inr c inr c mvi a,4 outp a outp b ; WR4 inr a outp a outp e ; WR5 mvi a,3 outp a outp d ; WR3 ; init baud rate mov c,m res 2,c ; baud rate port pop h bit 2,m ; soft baud? rz mov a,m ; 0; 1,2,3..15 ora a rz cpi 10 ; 1,2,3..15 jrnc is0 dcr a ; 0,1,2,3,4,5,6,7,8,10,11,12,13,14,15 is0: outp a ret inputsio: inp0: call instsio jrz inp0 ; wait for character ready mov c,m inp a ; get data ani 7Fh ; mask parity ret instsio: call vector ins0: mov c,m inr c inr c xra a outp a inp a ; read from status port ani 1 ; isolate RxRdy rz ; return with zero ori true ret outputsio: mov a,c push psw outp0: call outstsio jrz outp0 ; wait for TxEmpty, HL->port pop psw mov c,m outp a ; send data ret outstsio: call vector os0: mov c,m dcx h dcx h inr c inr c mvi a,00010000b ;reset ext/status change outp a inp a xra m dcx h ; ana m ; [ZR] = ready ani 00111000b jrnz nrdy inp a ani 04h ; test xmit holding register empty rz ; ori true ret ; return true if ready nrdy: xra a ret ;speed$table: ; DTE,DCE ;0 db 00h ;no baud rate ;1 db 0 ;50 ;2 db 1 ;75 ;3 db 2 ;110 ;4 db 3 ;134.5 ;5 db 4 ;150 ;6 db 5 ;300 ;7 db 6 ;600 ;8 db 7 ;1200 ;9 db 8 ;1800 ;10 db 10 ;2400 ;11 db 11 ;3600 ;12 db 12 ;4800 ;13 db 13 ;7200 ;14 db 14 ;9600 ;15 db 15 ;19200 end  6530 = vers equ '0e' ; March 12, 2017 16:15 drm "WIN3KP.ASM" ;********************************************************* ; Winchester Disk I/O module for CP/M 3.1 on KAYPRO ; Copyright (c) 2017 Douglas Miller ;********************************************************* MACLIB Z80 extrn @dph,@rdrv,@side,@trk,@sect,@dma,@dbnk,@dstat extrn @dtacb,@dircb,@scrbf,@rcnfg,@cmode extrn ?bnksl,?timot,?getdp extrn ?halloc extrn @lptbl 0000 = false equ 0 FFFF = true equ not false ; Ports and Constants 0014 = sysctl equ 014h ;winchester disk control bits 0032 = dev0 equ 50 ; first drive in system 0002 = ndev equ 2 ; # of drives is system TEMP $$$  1 CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321PASSWORD0CONFIRM  []=,  *** Aborted by ^C ***$ Disk I/O $ Drive $Read Only$Currently Opened$Password Error$Password: $ $Not erased, $ ERROR: Missing Delimiter or$ Unrecognized Option $Near: $Requires CP/M 3.0 $Enter filename: $ $ERROR: Invalid file name $Confirm delete all user files (Y/N)?$No File $ (Y/N)? $ *** Aborted by ^C ***$11͢}0͢|HSb   4 ڑ!16fb( r2:<<2}wb! 6 *}& 6 !u6:}!uڑ*u&  ~aڊ*u&  ~}Ҋ*u&  ~ w!u4U! "+!\ "-+5 "{{͔zb   > {͜*{~ *{#"{*{#"HR :\   O y<2\ 2y.3l -:1/Ҁ!u6 :u<2uO !\ ~??(> !uҀ:2/Ҁb@2x:xy:xYH/}   .l \ -ˆ ͫl ͻ2z:zµb   :z6:z`O ! "/E";G"=I"? "A"C"E:1Ҷ*/:y³:\ A=OI:I I!v6> !vW:v ?.I*v& */NI:v<2v)b@2x I I:xƒb   :xy:xYHҳ. */#DM] -¨ . */#DM] -   ͫ*;E*=G*?I*A *C*E!=l ͪ-.*=l -%2zõ   v  !q*&    !p+q*  !s+p+q*:w#6 *  *#"N#Fy      !p+q* ! p+q*   !"p+q*!     - !'q:'2#!$6 #1 !*r+s+q:(2#!$6*)#s#r#1  m !Nq!O6*O&  X> *O&  :Nl:O!O4F!Ur+s+p+q+p+qͪ !\6 *T~ *T~2\*YM=2L!`6:L  :`*YM=2LïÐ:V2KN :V2K2_*T~2]!`6 *T~2\*T~ j*TN ! *R*R =2^!_^!`6!W6:_!W[ :`T!W4=a*T6 N *T:]w:KH͂+s#rͪ :L ʔ*H#"HÙ!L6:\2aO *R ~2X*X& *P:!a4*T:aw*X& *P:Y*a& *R~2Xë*T6 *H~2Y͚:X2Z!V6*H#~2Y!Z4N *P :M( !`6 > *Z& *P:Y> !`6 !V4N *H ~2Y*V& *H~2Y*YM=2L:L>!LHҗ !V4N *H ~2Y*YM=2Lf :V2KH͂#+s#r*HN=2L! *H#"Hê ͙ b    I I!es+q+p+q:e=2e *b:dw*b#"b !fq I:f) b:f7 b:f:fHU b:fc b:fq b:fҁ    !hp+q:2Қ  *g >w3ͫ*g:\ w*gDM"i *g >w*i} *i|2k:kH *kM :k>Y2la :l{ :l :lb3 !m6 >!mڗ 2n D *m& 3 :nw:n O × :nZ  :n€ :mm  :m=2mO !3 6 , :n    !m4# ͙2n!oq:1 :\ A=OI:I I!v6> !v :v .I*v& */NI!v4  bb*oM \ ͂ 2wQ :w$ *wM B :wB *wM͞ \ ͂ 2w:wQ *wM͞ !L6!J6 :L :LH:LH Jt:J b.bLb:KH͜+"p!r6:K!r *pNI*p#"p!r4¹    :J !26:J !16\ !tp+q*s~ ~ H% *s#"s *s~ 1 > >! `i^#V#~#for0V y wÇ G:„ xA  a{k_  ~ ~r_ ogi`N#Fogo& og_ {_z#W 0  1I" CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 6543218/82 Invalid Filename$DIRECTORY FULL$DISK FULL$Creating Password$File not found$File not available$  ,.;=:<>_[]*? ERROR - $Password ? $Cannot Edit Wildcard Filename$Enter Output file: $FILE IS READ/ONLY$NEW FILE$-(Y/N)?$Insufficient memory$Enter Input file: $Output File Exists, Erase It$ BREAK "$" AT $END OF LINE$1I"1I"̈́""%*"%}0!#6% !"I" ͫ!+!#s ͠!#s#r! I"!^ ͵ #I"!++s#r!#ͧ!+s#r !"#*#ͺ!"L#*I"% 6 *I"+"K"ͫ!"M":] sr ͡ !#6 \ Mڀs:#Ҷ\ S:h 2y#!h 6 *"%| ¶1 2!% ¶!!%6!#6 !+#:\ :t#/H+# ͍͋!%6 ! "%*K""%!#6 à1I"! %6#@1I"! %6?@1I"! %6>@1I"! %6F!"$%@! %6F!"$%1I"!w#6  * %M͟  :% :% H| Ã*%M͟ > $%!ʝ*$%DM ! "$% 1I"!{#6! %6 !z#6 ͂ ! %6E: $2%E͑  sð H͑  !s#6 #~:+#2%:\ 2+#:%2\ #+#3\ +#!t#6ð :%I`!#: $: % H2z#i!#6! "%}2%*%+% ~ fiW?:% <:%:%H:%H:%­ ͋:% :#!# :%^> :#2#O>  w:#!#?!w#6!#6 !w#6 :#2#!#&:#2#:#2#:#!#< ,V*%+% ~ P !%6 :%ƒ> *%% ~2%O͟ !%6 :% *%+% ~ HҬ ͟ - *%Mo ^w:%@Ow:% :z#/H- : % :% !#4 :% :#O>!#w-:% :% /!%6  w4!%6 !#6 pi:%O- !#6 :~#!z#] ð O͸ u\ Kð :%RRP"m2 %Ғ!v#6 :v#: %ڬ P"r"!\"6 !p"6 #6P"!v#6Y2%-!v#6 P"Kð Q͸ +#ͺ:t#/!s# #+#3+#ͺsð :%-&͂ !%6 :%#7ͻ͂ t!T!:%:Q!%6L=!t:%:t͂ !=!:%t*%#"%Ҁ!%6 :%B¡!%>w! "%*K""%ͅð :%C²Ͳͅð :%DͲ͋ð :%K͋ð :%L͑ð :%P !%6w  ͎ð :%T ð :%U6 :%2}#ð :%V… f %%!DMt/͟ *K"DMt  :%2~#} !#6 !#6 ð :% ± :%: % HҮ ͑ð :%Hҭ :%A !%6*%"%*K""%ͅ   !%6 ͅê :%F M \ ê :%J¤ Mx: %2 %xҡ \: %=2%:%<2%! %f *%& $ ~2%-E *%"%* %M* %~ ! %: %%!"%!%6 ͅ*%DM͘4 ê :%M: % H !%6>%! L:%<2%O !%$ Hqy :%2 %!%6 *%#s#rê :%Nf Mc * % ` ͭ/ @̀ !%6 ! "%͇ͅ!%6K"%!]   ê :%S¶ Mxҳ \: %2%%!DM͘! %:%Ұ *%& $ ~2%!%4-Ï t ê :%W ê :%Xu P"m2 %!#6  !u#6 P"^:#  r `!u# ͓B !u#6 r"P"!"6 #6 !~"6 !"6 r":#B 5*%"%%%!o *%% N *%"%K >ê :%ZŸ ҏ ;  @Ҝ Ï ê :% ʪ ð ív       !&%q:w# *&%&  !'%q:'% !#4:'%  !#6 *'%M :#     !#55!(%q:(% :#O>H2)%yQ !(%6 !*%6 :)%!*%n *(%M !*%4V !+%q:+% ~ >:+% :+% H:+% H!,%q*,%Mo ڻ ^+ :,%@2,%*,%M+  ͟  ͟ !.%p+q*-%  !0%p+q */%DM !2%p+q *1%DM !4%p+q*3%  !6%p+q*5% :! %6O!"$%@!8%p+q*7% !:%p+q*9% 2#!<%p+q*;% 2#!>%p+q*=% !@%p+q*?% !B%p+q*A% !#6#     >>   !D%p+q*C% !F%p+q*E% !K%r+s+p+q+q:G%=2G%+*H%*J% w*H%#"H%*J%#"J%!M%p+q###*L%g R !O%p+q*N%f !P%q*P%& - :u#Ҁ#^͵    !R%p+q*Q%DM s+#K͍:#ҹ#!T%p+qͬ*S%DM^!V%p+q *U%DMͺͬ*U%DM͑!X%p+q*W%DMͺͬ*W% 2#!\%s+q+p+q:\%=2\%2*Y%:[%w*Y%#"Y%!`%r+s+p+q *]%*_%DM"͹!a%6 :#!a%ڵ*N#*#DM\ q2# ʤ>!#ґ͟*N#*#6:#2a%î *N#"N#!a%4`͹! "N#:s#>#N#!X*N#*#~2b%*N##"N#:b%:t#):s#)!R#+##R#3R#ͺ:#)>> !P#ͧ!!d%s{ @*P#!e%s! "P#!c%6:d%!c%*P#*L#DM+#́ ʵ]> P#!ʦ*P#:e%ͷ!*P#*L#DM*L#*P#:e%ͷ!"P#$ *P#"P#!c%4S! "P#!f%q#P#!,*P#*L#:f%w*P##"P#!g%q:#,Q:~"2":"2"r"́ '$ $!#6 *#& " :g%w!#4:#2h%>!h%Y!h%4Dr"K!i%6 :i%=2i%ʐ*i%& r" *i%& P" ʍ> e>:"2~"r":"2"Qr"q :"2"!#6 >!#*#& " ~!#4¾*P#} ,:s#\ K+#K:#͟:x#+:5#25#ͬ+#:t#G\ ]#l 3\ +#]#;#3+#!k%p+q *j%*j%DM!l%q: % ʄ*l%M͟ !m%q:m%a/>z!m%/H!n%q*n%M͌ҹ:n%_:n%  # !o%6 >!o%I Oͤ2p% *o%& # :p%w:p% I:p%:p%7:o%$:o%=2o%O !# 6 :p%Bs!o%4ͭ2p%!q%q:q%a!q%6:|#p*q%Mͤ:q%!s%p+q!'"v%!u%6 > v%!*r%*v%~!{2t%*r%̀!"r%PY! ~!"v%:t% !u%!u%6:t%0O͟  ͟ Å!y%p+q:~#*x%DMt:͟  ͟ :z# ͟ *͟ *!$DM: % &*%&  ~ I:%<2%O ! ~> > ! %ҡͭ_! %:%ڍ> %!ʈ*%+"%> ͷ!ˆ!%6 :%<2%=O !%$ NP:z#Ұ; OP:{#!{#6 :# !~#K"%! *͟ ͡! $6  ͟ !#6 !#: $2{#* $& # 6 : $<2 $=O !# NP:#B*Oͤ2%LLOͤ2%!{%p+q!~%6 ! %6!#6 .:% ʏ:%ʏ *z% *z%#  :% ž.Ð͹y!|%6 ͹>!|%ҽÓ͡.ê:%::|%Ó*z%#~A<*z%wO>Ó*z%#6 .:%.)!|%6!#6.͹)> !|% Ó͡. :%;v *z% !|%6.͹d>!|%[Ó͡.H *z%DM#Þ>!}%҅Ó:~%ڏÓ:~% ! %6 > :|%<2|%O *z% :%w!~%6!}%6 >!}%*}%&  :%> !}%  >!}%4¾> :#' ͡! $6 !{#6 +#M9!t#6 :,# 6,#] E+#\ #4# :q"wRP"q r>!q"6 :q"<2q"=O ! NP!h 6 !j 6 !| 6 :#ҩcͬ\ ;"#:# c*#}|Hͽ ͬ\ ;"#*#}| H ; ********************************************************* ; * * ; * D a t a D e f i n i t i o n s * ; * * ; ********************************************************* ; 0080 = windta equ 80h ;1002 data port 0081 = winpcmp equ 81h ;1002 precomp port 0081 = winerr equ 81h ;1002 error port 0082 = winsc equ 82h ;1002 sector count port 0083 = winsec equ 83h ;1002 sector number port 0084 = winlsb equ 84h ;1002 lsb of cylinder port 0085 = winmsb equ 85h ;1002 msb of cylinder port 0086 = winsdh equ 86h ;1002 size/drive/head port 0087 = winstat equ 87h ;1002 status port 0087 = wincmd equ 87h ;1002 command port ; 0010 = rstcmd equ 10h ;1002 restore command 0070 = seekcmd equ 70h ;1002 seek command 0020 = rdcmd equ 20h ;1002 read command 0030 = wrcmd equ 30h ;1002 write command ; 00A0 = wincfg equ 10100000b ;ecc and sector size bits 00B8 = nosel equ 10111000b ;winchester de-select ; TODO: abstract all this to allow other drive types ; ST412 drive parameters (as used by Kaypro): 0132 = ncyl equ 306 ; total number of cylinders 0131 = lcyl equ ncyl-1 ; last cylinder number 0099 = pcmpcyl equ ncyl/2 ;starting precomp cylinder number 0004 = nhed equ 4 0011 = nsec equ 17 0200 = zsec equ 512 0004 = fsec equ zsec/128 ;--------- Start of Code-producing Source -------------- cseg ;put only whats necessary in common memory... 0000 9B00 dw thread 0002 3202 db dev0,ndev 0004 C33C04 jmp init$win 0007 C3C204 jmp login$win 000A C34C05 jmp read$win 000D C36F05 jmp write$win 0010 1600 dw string 0012 00004000 dw dphtbl,modtbl 0016 4B41595052string: DB 'KAYPRO ',0,'Winchester Disk Interface ',0,'3.10' 003D 3065 dw vers 003F 24 db '$' 0008 = winlun equ 00001000b ; Kaypro convention 0000 = winpt0 equ 00000000b 0002 = winpt1 equ 00000010b 0004 = winpt2 equ 00000100b 0006 = winpt3 equ 00000110b ; Both partitions use cyls 0-305, but different heads. ; head = (PTN << 1) + (track & 1) ; track >>= 1 modtbl: ; -PTN cfg-byte-template ---not-used-------- 0040 80A80000 DB 10000000b,wincfg+winlun+winpt0,00000000B,00000000B 0044 FFFFFFFF db 11111111b,11111111b,11111111b,11111111b 0048 81AA0000 DB 10000001b,wincfg+winlun+winpt1,00000000B,00000000B 004C FFFFFFFF db 11111111b,11111111b,11111111b,11111111b ; currently, both (all) partitions are identical, ; due to head-slice algorithm for partitioning. ; But, Universal ROM pulls DSM from partition info on disk, ; So each could be different... Also, ROM version selects OFF... 0050 4400 dpb0: dw nsec*fsec ; SPT 0052 051F01 db 5,01fh,1 ; BSH,BSM,EXM 0055 6504FF03 dw 1125,1023 ; DSM,DRM 0059 FF00 db 0ffh,000h ; ALV0 005B 00800400 dw 08000h,4 ; CKS,OFF 005F 0203 db 2,003h ; PSH, PSM 0061 4400 dpb1: dw nsec*fsec ; SPT 0063 051F01 db 5,01fh,1 ; BSH,BSM,EXM 0066 6504FF03 dw 1125,1023 ; DSM,DRM 006A FF00 db 0ffh,000h ; ALV0 006C 00800400 dw 08000h,4 ; CKS,OFF 0070 0203 db 2,003h ; PSH, PSM ; Controller is already done by now win$rw: 0072 3A9900 lda cmdbuf 0075 E610 ani 010h 0077 3EB2 mvi a,0b2h ; inir jrz nread 0079+2802 DB 28H,NREAD-$-1 007B 3EB3 mvi a,0b3h ; outir nread: 007D 328F00 sta here+1 0080 3A0000 lda @dbnk 0083 CD0000 call ?bnksl 0086 2A0000 lhld @dma 0089 018000 lxi b,windta 008C 1E02 mvi e,2 here: inir 008E+EDB2 DB 0EDH,0B2H 0090 1D dcr e jrnz here 0091+20FB DB 20H,HERE-$-1 0093 AF xra a 0094 CD0000 call ?bnksl 0097 C9 ret 0098 00 offline db 0 ; fatal error prevents use 0099 00 cmdbuf db 0 009A 00 romid db 0 009B = thread equ $ dseg ; HASH/HBANK is set by main bios... dphtbl: 0000 0000000000 dw 0,0,0,0,0,0,dpb0,0,alv0,@dircb,@dtacb,0ffffh 0018 00 d0h: db 0 ; HBANK 0019 0000000000 dw 0,0,0,0,0,0,dpb1,0,alv1,@dircb,@dtacb,0ffffh 0031 00 d1h: db 0 ; HBANK 0032 alv0: ds 512 ; really only need about 283 0232 alv1: ds 512 ; 012E = ptnoff equ 302 ; offset in sector of ptn tbl partns: 0432 0000 d0dsm: dw 0 0434 0000 d0cyl: dw 0 0436 0000 d1dsm: dw 0 0438 0000 d1cyl: dw 0 0008 = partnz equ $-partns 00CA = ptnend equ zsec-ptnoff-partnz 043A 0000 curptn: dw 0 ; cyl offset of current partition ; driver init. DRM+1 is fixed at 1024 init$win: 043C 210000 lxi h,@lptbl 043F 0E10 mvi c,16 initw3: 0441 7E mov a,m 0442 D632 sui dev0 0444 FE02 cpi ndev 0446 DA4F04 jc initw2 0449 23 inx h 044A 0D dcr c 044B C24104 jnz initw3 044E C9 ret ; no HDD drives in system, do nothing. ; alternatively, could check for existence of hardware. ; for example, AND inputs from ports 80-87 and if 0FFH ; then ahrdware does not exist. initw2: ; if we allow dynamic addition of drives (changes to lptbl), ; then this needs to be triggered in login$win by an init flag. 044F 010010 lxi b,1024*4 0452 111600 lxi d,d0h-2 0455 CD0000 call ?halloc 0458 112F00 lxi d,d1h-2 045B CD0000 call ?halloc 045E AF xra a 045F 329800 sta offline 0462 3A5000 lda 0050h ; gift from loader: ROM id 0465 329A00 sta romid ; TODO: move to login code, for each LUN... 0468 CDA105 call winrest ; TODO: Universal ROM uses track xlat (spares) table... ; For virtual hardware it should not matter. ; But, partition info is also stored there. Need that now. 046B 3A9A00 lda romid 046E FE55 cpi 'U' 0470 C0 rnz ; done if not Universal ROM 0471 210200 lxi h,2 ; new OFF 0474 225D00 shld dpb0+13 0477 226E00 shld dpb1+13 047A 3A4100 lda modtbl+1 ; spares must be on "drive 0" 047D D386 out winsdh 047F CD2106 call winrdy 0482 CAC705 jz disable 0485 AF xra a 0486 D384 out winlsb 0488 D385 out winmsb ; Cyl 0 048A 3C inr a 048B D382 out winsc ; 1 sector 048D 3E10 mvi a,nsec-1 048F D383 out winsec ; last sector on track 0491 3E20 mvi a,rdcmd 0493 D387 out wincmd 0495 CD3106 call winbusy 0498 CAC705 jz disable ; TODO: checksum verification... ; surgically read partition info from buffer... 049B 012E01 lxi b,ptnoff initw0: 049E DB80 in windta 04A0 0B dcx b 04A1 78 mov a,b 04A2 B1 ora c jrnz initw0 04A3+20F9 DB 20H,INITW0-$-1 04A5 0608 mvi b,partnz 04A7 0E80 mvi c,windta 04A9 213204 lxi h,partns inir 04AC+EDB2 DB 0EDH,0B2H 04AE 06CA mvi b,ptnend ; rest of sector initw1: 04B0 DB80 in windta 04B2 05 dcr b jrnz initw1 04B3+20FB DB 20H,INITW1-$-1 04B5 2A3204 lhld d0dsm 04B8 225500 shld dpb0+5 04BB 2A3604 lhld d1dsm 04BE 226600 shld dpb1+5 04C1 C9 ret login$win: 04C2 3A9800 lda offline 04C5 B7 ora a 04C6 C0 rnz ; This should prevent read/write from ; ever being called ; TODO: check init flag (per LUN, not partition) ; and call winrest (anything else?). ; Could always select LUN and test READY. 04C7 3A9A00 lda romid 04CA FE55 cpi 'U' 04CC 3E00 mvi a,0 04CE C0 rnz 04CF 2A0000 lhld @cmode 04D2 7E mov a,m 04D3 E603 ani 00000011b ; ptn 04D5 87 add a 04D6 87 add a ; 4 bytes per drive 04D7 3C inr a 04D8 3C inr a ; +2 for cyl offset 04D9 5F mov e,a 04DA 1600 mvi d,0 04DC 213204 lxi h,partns 04DF 19 dad d 04E0 7E mov a,m 04E1 23 inx h 04E2 66 mov h,m 04E3 6F mov l,a 04E4 223A04 shld curptn ; cyl offset of current partition 04E7 AF xra a 04E8 C9 ret setup$win: 04E9 2A0000 lhld @cmode 04EC 23 inx h 04ED 46 mov b,m ; SDH template eSSDDHH- 04EE 3A0000 lda @trk 04F1 E601 ani 1 04F3 B0 ora b ; eSSDDHHH 04F4 D386 out winsdh 04F6 CD2106 call winrdy 04F9 C8 rz ; timeout 04FA 3E99 mvi a,pcmpcyl 04FC D381 out winpcmp ; This is horrible, but since 302C ROM does it ; we also must to keep compatible on disk: ; if (trk > 7) trk += 4; ; else if (trk >= 4) trk += (trk - 4); ; For universal ROM: ; if (trk > 1 || ptn > 0) trk += 12; ; All: ; putHd((trk & 1) | (ptn << 1)); ; putCyl(trk >> 1); 04FE 2A0000 lhld @trk 0501 3A9A00 lda romid 0504 FE33 cpi '3' jrnz setup2 0506+2015 DB 20H,SETUP2-$-1 0508 7D mov a,l 0509 E6F8 ani 11111000b 050B B4 ora h jrz setup1 050C+2806 DB 28H,SETUP1-$-1 050E 110400 lxi d,4 0511 19 dad d jr setup2 0512+1809 DB 18H,SETUP2-$-1 setup1: 0514 7D mov a,l 0515 FE04 cpi 4 jrc setup2 0517+3804 DB 38H,SETUP2-$-1 0519 D604 sui 4 051B 85 add l ; CARRY not possible 051C 6F mov l,a setup2: srlr h 051D+CB3C DB 0CBH,38H+H rarr l ; from; NETWORK DISK OPERATING SYSTEM FOR CP/NET on CP/M Plus v3 ; ; 1982.12.31. exact date unknown ; 2016.05.20. adapted for RSX on CP/M Plus ; Dropped support for remote console/list, due to BIOS intercept issues. ; BIOS intercept is a problem because of the transient nature of RSXs. ; Could add back support for "well-behaved" LIST OUTPUT users, ; provided BIOS intercept is not required. ; ;TITLE NETWORK DISK OPERATING SYSTEM FOR CP/NET SLAVE maclib z80 extrn NTWKIN, NTWKST, CNFTBL, SNDMSG, RCVMSG, NTWKBT, CFGTBL ; ; ; EQUATIONS OF DATA ; LF EQU 0AH ;LINE FEED CR EQU 0DH ;CARRIAGE RETURN EOF EQU 1AH ;CTRL-Z IS END OF FILE LEOF EQU 0ffh ;-1 is logical end of file ; TOP equ 0000h CDISK equ 0004h BDOS equ 0005h SYSDMA equ 0080h TPA equ 0100h SCTLNG equ 128 ;ONE SECTOR LENGTH ; ; EQUATIONS OF DOS FUNCTION ; CCNDIN EQU 3 ;CONSOLE INPUT WITH DEVICE CODE CCNDOT EQU 4 ;CONSOLE OUTPUT WITH DEVICE CODE CBUFPR EQU 9 ;BUFFER PRINT CRDBUF EQU 10 ;READ BUFFER CCONST EQU 11 ;GET CONSOLE STATUS CGETVR EQU 12 ;GET VERSION NUMBER CRSDSK EQU 13 ;RESET DISK COPEN EQU 15 ;OPEN FILE CCLOSE EQU 16 ;CLOSE FILE CSRFST EQU 17 ;SEARCH FIRST CSRNXT EQU 18 ;SEARCH NEXT DIRECTORY CREAD EQU 20 ;READ SEQ CWRITE EQU 21 ;WRITE SEQ CSTDMA EQU 26 ;SET DMA ADDRESS CGTALL EQU 27 ;get alloc vector addr CGTDPB EQU 31 ;get DPB addr CSTUSC EQU 32 ;SET USER CODE CRREAD EQU 33 ;READ SEQ CRWRIT EQU 34 ;WRITE SEQ CRSDSN EQU 37 ;RESET DISK BY DISK VERCTOR CFRSP equ 46 ; get disk free space scbf equ 49 ; get/set SCB CBIOS equ 50 ; direct BIOS call COVLY equ 59 ; load overlay CRSX equ 60 ; call RSX function CDEFPW EQU 106 ;set default password CLSBLK equ 112 ; List Block - does not fit in table... CBMAX EQU 50 ;MAX OF BDOS FUNCTION - CXMIN.. collapsed here CXMIN EQU 98 ;extended bdos functions base - collapse into CBMAX ; CNMIN EQU 64 ;MIN OF NDOS FUNCTION CLOGIN EQU 64 ;LOGIN CLOGOF EQU 65 ;LOGOFF CNMAX EQU 72 ;MAX OF NDOS FUNCTION ; ; SLAVE CONFIGRATION TABLE ; ; -1 NETWORK STATUS ; 0 SLAVE PROCESSOR ID ; 1-32 A - P DISK DEVICE CODE ; 33-34 CONSOLE DEVICE ; 35-36 LIST DEVICE ; 37 LIST BUFFER COUNTER ; 38-42 MESSAGE HEADER FOR LIST OUT ; 43 LISTER DEVICE NUMBER ; 44-171 LIST OUT DATA BUFFER ; ; EACH DEVICE DATA USED 2 BYTES ; IN 1-36 ; 1B:BIT 7 H ON NETWORK ; BIT 6 H SET UP IN DISK ; BIT 0-3 DEVICE NUMBER IN MASTER ; 2B:MASTER ID ; ; BIAS TO DATA IN CONFIGRATION TABLE ; BSRID equ 1 ;client ID BSDSKS equ 2 ;first byte in disk table BSDSKE equ 33 ;last byte in disk table BSCONS EQU 34 ;BIAS TO CONSOLE DATA BSLIST EQU 36 ;BIAS TO LISTER DATA FCBRR0 equ 33 ; offset of RR0 field in FCB (not FCB in MSG) scbase equ 09ch ; base address of SCB within page org 0 ; RSX Prefix serial: db 0,0,0,0,0,0 start: jmp COLDST next: jmp 0 prev: dw 0 remove: db 0 ; 0ffh for remove nonbank: db 0 rsxnam: db 'NDOS3 ' loader: db 0,0,0 db 'COPYRIGHT (C) 1980-82, DIGITAL RESEARCH ' db 0,0,0,0,0,0 NDERRM: db CR,LF,'NDOS Err $' NDERR2: db ', Func $' BDOSE: dw 0 CURSID: db 0 scbadr: dw 0 MSGTOP: db 0 MSGID: db 0 db 0 ; We assume network hw/sw sets this. MSGFUN: db 0 MSGSIZ: db 0 MSGDAT: ds 256 db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h STACK: ds 0 USTACK: dw 0 FUNCOD: db 0 PARAMT: dw 0 RETCOD: db 0 MCRPNT: dw 0 LSTUNT: db 0 F5SETF: db 0 FNTMPF: db 0 ORGBIO: dw 0 HEXMSG: db 0,0,'$' CLDERR: db 'Init err$' COLDSE: ; BC and DE are pushed... lxi d,CLDERR mvi c,CBUFPR call next lxi h,next shld start+1 ; only until remove takes place... mvi a,0ffh sta remove pop b pop d jmp next ; pass to BDOS and hope for the best... ; Not a true cold start - we are in context of a valid BDOS call... COLDST: push d push b call NTWKIN ora a jnz COLDSE lxi h,NDOSE shld start+1 xra a ; sta remove ; is the required? lxi h,MSGDAT shld MCRPNT ; Apparently, it is passe to use BDOS calls for certain things... lxi d,scbadd mvi c,scbf call next shld scbadr lxi d,CSTUP mvi c,CBUFPR call next pop b pop d jmp next scbadd: db 03ah, 0 BDERMD: lhld scbadr mvi l,scbase+4bh mov a,m ret SYSMSC: lhld scbadr mvi l,scbase+4ah mov a,m ret CURUSR: lhld scbadr mvi l,scbase+44h mov a,m ret ; Some sneaky programs, like ERASE.COM, use the "saved search address" from the SCB. ; so we must put the address there if the BDOS does not (i.e. networked drive). SETSRA: lhld PARAMT xchg lhld scbadr mvi l,scbase+47h mov m,e inx h mov m,d ret SETDSK: lhld scbadr mvi l,scbase+3eh lda PARAMT mov m,a ret CURDSK: lhld scbadr mvi l,scbase+3eh mov a,m ret DMAADD: lhld scbadr mvi l,scbase+3ch mov a,m inx h mov h,m mov l,a ret CSTUP: DB 'NDOS3 Started.',CR,LF,'$' CSTDN: DB 'NDOS3 Ending.',CR,LF,'$' ;wbmsg: DB 'NDOS3 Warm-boot.',CR,LF,'$' NDOSE: mov a,c ; must save REAL function code! sta FUNCOD sta MSGFUN ora a jz WARMST cpi COVLY jz LDOVLY ; LOAD OVERLAY (RSX SCRUB) - indication of warm boot cpi CRSX jz CALRSX ; used to unload CP/Net cpi CBIOS jz next ; DIRECT BIOS CALL - might need to trap for LIST OUT lxi h,FUNTBS NDOSE1: mov a,c sub m jc next inx h cmp m inx h jc NDOSE2 inx h inx h mov a,m ora a jnz NDOSE1 jmp next NDOSE2: sspd USTACK lxi sp,STACK mov c,a ; modified func code! mov a,m inx h mov h,m mov l,a ; HL = func table push h xchg shld PARAMT call DMAADD shld DMAADR ; cache DMA address for this call... lxi h,MSGSIZ mvi m,0 ; assume 1-byte payload inx h shld MCRPNT ; MSGDAT xra a mov b,a mov d,a pop h ; specific func table in HL dad b mov e,m ; don't need HL anymore sub e ; assumes A=0 jz tnextp ; code 0 = not handled by CP/Net NDOSE4: lxi ͍*#}2#:t#C:e &;͍C:f C:d >!#6C!x#6:#f:t#X͍!s#6M #+#3!7#6 +#:#…͟:y# ʞ:y#27#ͬ+#,!7#6 !K#6 *#"N#! "P#! "!$!"%> %!! "%*%+"%>> ! "#$:% *%#"%*%"%! "%+"%$*%"%*K""%! "%!%6:%Ҭ%%!2%*%v!"%% ~ He*%"%0*%+"%> ͷ!2%:%ڕ!%6 %%!+s#ré*#$+"#$:%ҩ*%"%):% *%"%*%+"%*%#"%*%#"%*!$#"!$*!$+"!$*%#"%*%#"%*%+"%% ~ *%+"%!%q:%Y%%!V:%S*%% ~2% E*%% :%wÄ%%!҄:%ҁ*%% *% wY ͅ!%p+q%%!ʱÞ:% *%"%%%!! "%%%!"%*%"%%I"!%!*K""%*%*%"%%%! OQ2%3*%% :%w:% M!%q:}#d*%MP:%K"%!x*%% ~2%O:% –hͻ%K"!M"!ڼÿhÝ!%6 ! "%*%"%͚ͅh%%!!%6ͅͻ:s#)2%)*%M%%!=*%% :%w:% VL2%:% :z#/HH/Wҥ:% ”!%6 ͦ!%6 :% Ÿͦx* %& $ :%w: %<2 %d!%s+q*%"%!%6 :%/%K"!H8*%#"%"%:%2%*%& $ *%% !%:%2%/H5!%4*%#"%:%I*%+"%ͅ:%! %6 x: %2 %* % l!%p+q*%DMM2%: %ڍ! %6O@ *% ~ :#/Hҷ *%#*%#~ *%##:%*#$*!$DM!z#6:% ! "#$*%"%*%"%*%+% ~2% %:# " ,*#$#"#$*%"%%%!v:% Z*#$#"#$ͭZ*%% ~2%O͟  *%"%2*!%& "%*%"%*%"%̀w͑:%2%!%6w:%2%K"%!>%!H͇!%6 >!%ͭ@>!!%4!%6! "%ͻ, M"%!& )  !%6 -!%6 -:#>%!H] @!|#6*%M͌2%*%MP2%:%/!}#+w!|#6 L2%^ !%q!%:%:#H: % H!%q*%M͑  *%M V  ; Oͤ2% :%N à:%Y > > :%02O"O> /! "%!))덑o|gҗ! =…!^#V) ¡!^#V|g}o «!_ {ozgi`N#Fogo& og H !=! LIB X$$$$$$$LIB    X$$$$$$$LIB$$$BAK    { | | | || Stream/Record Sequen/Direct Input/Output Keyed Access P < $con  i| m| TCI|||-|;| Y|Z| | |  |||| | | | || | || | .dat ||| ||||  HHͯ :!^w:<2:0}:@E}:!S!W6: z!]6:c m!c6:_ z!_6l ::,: HHҰͯ : 2ó:E:  1:2v!q!*8!*6: >ͦ>ͦ    !q:_    !p+q.*        !q*&  !p+q* 2!p+q* 2!p+q* 2  2!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  ! q  *&   ! 6à  ! 6 à  ! 60à  *&   ! 6  ! 6  ! 6  *&   . 1 4 7 : = F P [ f q  :2 !q: " *M n :c 4 *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 m  2mͯ m! 6 2m! 62m! 62m!6   2m'2:2 :TҒ:2!6*ME:2::^Ҳ:<2 2ý: 2:} > ͯ :i:2:d*M:[ 16O CP/M Version 3.0Copyright 1998, Caldera, Inc. 101198 654321ERROR: Illegal Option or Modifier. $File Spec Limit is $ERROR: Illegal Global/Local Drive Spec Mixing. $Requires CP/M 3 $ERROR: Options not grouped together. $ERROR: Illegal command tail. $No File $1616|27}27:70:7H҂Y0uÅl92w88͟8͓,T27!86 8y6:8 :8 Y0u:8@ K #Y0uä/ !l8͐2w8*w8M)*h8"8! "j8h8͐2v8!f86 > h8́6:n8 HҌ!\ 6?\ $28! "8:8n*8#"8428V*8DMl!*8) ! ͏6Ҍ!f86!g86!"j8:v8*v88*j885> `6:n8 :f8/!g8H !g86 !86 :u8$-h8͐2v8×*8"h8:Q9/:q8/HBY0uv   o& !x8q*x8&         !y8q:y82z8!{86 z81  m    !~8q:~80/>9!~8/H!8r+s+q+p+q*8> w#6 ! "8}28:8!8!8:8O *8 N~> *8!8:8O *8 ~0_ *8%65+s#r!86+s#r!84¸>!8s+p+q:8 7*8>:6+s#rN*8*8M! J6>6+s#r!8p+q!86 :8 !85> `6HҌ!8P6+s#r#4Z:8!8p+q*8N#FO28O>Ҭ>! "8> !8*8M!8F6+s#r*88͚6s#r:88y6:8 H; :8,*8#~A!t86#*8#~D*8##~IH;!76#*8#~D*8##~AHe!n86!s86#*8#~Ew!76#*8#~F­*8##~F”!r86ê*8##~U§!n86êA #*8#~G:8*8##~028*8##~0o& 6 *8 ~0_ !8s:8 />!8/H*8h8A #*8#~M,!q86#*8#~N{ *8 ~XK!76x *8 ~P`!76x *8 ~Su!u86 xA #*8#~R*8##~OHҠ!76#*8#~R*8##~WH!76#*8#~S*8##~Y!76 *8##~I!n86 *8##~O!u86 A #*8#~X !76#A 8͓8 *8#~L|8͓:8 v*8#*8Mo8͖p>o8́6gA 8͓sA yA 8 *8#~Ur 8͓:8 :7 HҧA :8 8y6Ho *8#~A*8##~LH!"h8f :8 :8Hc :8 *8#~0289 *8#~0o& 6*8##~0_ !8s:8 />!8/H] *8h8` A f A 8͓ç8 *8#~D*8##~R~IHH5 8͓:8 ¬ A :8 8y6H2 *8#~A*8##~LH !"l8Bl85+s#r) *8#~A/>P/H& *8#~A_l8) A 8͓ì 8 A !86Y0u:7  . *8# *7& %67  ,y -u  *7& %67  ~  ~ H  *7& %67  6  *7& %67  6 *8~  *7& %67 6 *8~= *7& %67 Hq!74( Y0 d 0o08͓:7!7B !76#6:7!7U !76+6:7!7p :n8 m !n86x !76+6:7 «  *7& %67  6 *7& %67 6!76> l8́6 !86 :7=!8  *8& %67 ~  *8& %67 :w8w *8& %67 ^l8!84¼ S !86 :7=!8S  *8& %67 ~:w8HL Y0u!84 > h8́6i K_h8>0!7Ң :r8ڢ o8y6¢ To& "o8>o8́6Ң ! "o8 state8, char = $ state7, char = $ state6, char = $ state5, nxtchar = $ state4, char = $ state3, char = $ state2, char = $ state1, char = $ startstate, char = $!8p+q!86 *8& *8~ ~ H| !84W :8!8q:8[:8]H:8(H:8)H:8=H:8,H:8 H >> !8p+q!86 *8#DML 28O> )*8~!8*8& *8~ !8'*8& *8~" *8&  *8~"*8~!8 *8& *86 *8&  *8"8>!8Җ:8=O *8 Ǹ :8!8O *8 Ǹ HҖ*8+"8*8~<:8!8=Oo:8!8O *8 DM*8, -*8& *8~"!86!84.:8=O *8 ~ :8=O *8 6 !8p+q!86 *8& *8~ Q*8& *8~a/>z/HJ*8& *8~ w!84!8q:80/>9!8/H!8q:8A/>Z!8/H:8<28O *8 ~28*8&  *8~28!8q *8 ͏6:8<28O *8 :8w!8q!86 *8Mj/:8$H:8*8Mj*8Mɀ" #  DIRLBL 1!M CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321! `i^#V#~#foͽ{¡y#wG:xA##6?)@w){#{s333333. ;;33,;;#wD{_#6 sO O ڹ.:;=,/[]<>a{Ҷ_#  ý Copyright (c) 1982 Digital Research File not found or no directory space Invalid file name. Directory Label attribute set Read Only (RO) Read Write (RW) , set to ERROR: READ WRITE DELETE NONE on off LABEL     @      @ Option requires a file reference Option only for drives. Assign passwords to input files. Assign a password to this file. Directory needs to be re-formatted for time/date stamps. Please see INITDIR. Protection not enabled for disk. Unrecognized option. There are no modifiers for this option. Modifier missing or unrecognizable. Not a valid modifier for this option. This option needs a modifier. Only first 8 characters of default password used. Only first 11 characters of label name used. Only first 8 characters of password used. Cannot have both create and access time stamps. Cannot set both sys and dir. Cannot set RO and RW. No options specified. Page and nopage option selected. Nopage in effect. Cannot set local options for file. Protection modifier is only ON/OFF for drives. Password protection is not supported in NON-BANKED SYS. Requires CP/M 3 or higher.              ACCESS0ARCHIVE0CREATE0DEFAULT0DIR0F10F20F30F40NAME0PASSWORD0PROTECT0RO0RW0SYS0UPDATE0PAGE0NOPAGE "%(+.3%\|"()/#!@&+-*? ?Directory Passwds Stamp Stamp Stamp Label Reqd Create Access Update -------------- ------- ------- ------- ------- Press RETURN to continue. ? Password ? Disk I/O Drive Invalid Drive. Wrong Password ? in filespec. ?ON OFF system (SYS) directory (DIR) , Drive Default password = Password = Label for drive Protection = or protection not enabled for disk. Modifier: Option: FILE: 1!1!1 ""*"}2W#|2X#̀ 2"!"6 :W#0w n ͎ 2!ͽ l 2"*U#&  ~ œ !U#4Æ *U#&  ""*U#& ~[ *"#""B!:" o ! !!6   S :" *"""B Q͟ 9 :"!"" g͟ !!6 = :"1 !!6 = :"= !!6]B | M !"6 :"k *"""!"6o P &͟ v!!q*!&   y !!p+q*!~ ʯ *!Ny *!#"!Õ     y  y ͹    :! !"4~<<+~H ͹ ͹ 0 ͏ Ͱ    2!:! !"6͹ ͹ !!p+q *!DM͏      !!q*!&  !!p+q*!     !!p+q*!      !!q*!& - !!p+q"u *!   "!!!p+q"u *!d !!q*!& e !!p+q"u *!f !!p+q"u *!g !!q*!& ) ^#V% !!p+q*! ! #q: #2"!"6 "1 !#r+s+q:#2"!"6*##s#r"1 !"6#6 "1 x > "9!® *"DM͏ ö *"DM͏ J ͏  "̀"##1! ͑ > #9!*#~[ !"6 *#~] !"6 *##"#!"6 *#!#s+q+p+q:#=2#J*#:#w*##"#-!#s+p+q+p+q:#=2#ʁ*#*# w*##"#*##"#Z: 2#aڛ:#{қ:# :#!#p+qx *#DM͏ M  " !#6 >!#?͂2 # *#& " : #w: # ?: #ý: #-:#ý:#=2#O !" 6 : #8 !#4Ͱ 2 #:"AOy :y F!!#6> !!#ڋ:!# s.y *!#& *!>Oy !!#4]x *"|2"#x F͉ :"#¸Y ͏ :"#b ͏ M͏ :"#M͏ :"#i ͏ :"#x ͏ :"#  ͏ !##q&"u  S 2##!$#q:$#>:$#o& &""!:\ w!"6 !"6 &"u *#EZ *#GZ *#IZ *# Z * #Z * #Z "*#DMKc 2%#¡> *%#M>!'#q=͏ :'# ͏  ͏ p͏  Z ͏  ͏  ͏  ZM͏ W͏ ]͏  y  Z!Ay Z/1y Z=2y ZK3y ZY4y !(#q*(#& *!~q>> :"ڒ:"ڒ&"u \ S O!)#q:)# ¨ͅ 2*#ò*"M 2*#:*#  F͉ p͏ :)# M͏ W͏ ]͏ :"*"M 2+#!"6 > !+#Ia:,#o& &""! >w *! ~ F *! ~ F!"6[!\ "!] K!"6&"u S 2,#:,#ʗ:,#`O !&" ~ Žc 2,#p U͉ ͉ :"!"6*! !K!"6 +6 ! ""}*"| ͌͘͟:!2" !"6:" ͟" *"*""K"j   ! "6 "͏ :"b:"Tͥ͟:"2"p *! >w " :" ‰!"6!"6*"*" "K:"ҥ:"Ҹ͟!"6*!#  > !"3!-#6 :"=!-#"*-#& *"~.*"*!#DM*-#K:-#"!# *! DMK!-#4*"*!#DM*"K!0#s+q+q:"G:"Z!"6͟*.#& " ~z *! :/#wÆ *! :0#w:"ͥ:"21#¤!"6:1#´!"6@:1#!"6 !"6 " :":"2"!:"͟:"21#O>͟ 4 *!  !3#s+q:"0:"C!"6͟*2#& " ~b*3#& *!>wp*3#& *!>w!"6 ͏ !"6  "͏   F  U *! >µ͏ û͏  *! >@@25#*! >͏ ͏ :5#͏ ͏  *! > ͏ ͏  *! ~1 v ͏ :"K͏ Ô:"@@^͏ Ô:" q͏ Ô:"/: " HҎ͏ Ô͏ :"Ҥm͏ v!6#q*"|. :6#͘, ͷ:" :6#*!DMͧ "" :6#*!DM "" ! ""*"| .͌:6#(, +͘> >*!DMͧ ""*"}t*"| kͥX*"| h͌͘t͘͟*"}ʘ *!  *! ~ژ͘*!DM ""*"}*"| ͥ*"| ͌, J͈͟>!"(:"(:"(:" :" ͟"*͘͟!"6:"?:"?:"2":"2!! ""*"}Š*"| }ͥj*"| z͌͘Ê͟  :"¦:!2!!2 o& ""͘2:! :!=2"*"MC ͽ !7#6> !7#*7#& \ ~?>!7#4> ͭ! \ K!"K:] :e HY!"6&"u \ S 28#O!\ "!͘͟ *8#M^!"6 !:#s+q*9#& )))A *:#& ~!;#q!<#6*<#& u :s—> *<#& u :;#«:<#!<#4Ä!@#r+s+p+q!G#6 :H# :H#2G#*D#M{2"!L#6:" =:L# *D#M{2":A#2"}> :A#2"2K#:H#2I#!L#6 :H#2G#:H# Dß*H#&  *?#*H#& *?#=2J#!K#–!L#6!B#6:K#!B#ړ=:L#ڌ0!B#4uÙ0}> :""!+s#r:" *"#"":2":I#:G#2M#O *?# ~2C#*C#& *=#:s!M#4~2H#*C#& *=#:D#*M#& *?#~2C#!H#6 *"~2D#:C#2E#!A#6*"#~2D#!E#4N *=# :tW!L#6 m*E#& *=#:D#m!L#6 !A#4N *" ~2D#*A#& *"~2D#*D#M{2":":"H:"H:"H!A#4N *" ~2D#*D#M{2"Õ:A#2""!#+s#r*"N{2"!h,NDENDR push h lxi h,FUNTB2 dad d push h NDOSE5: pop b ldax b mov d,a ani 07fh ; strip off EOP bit mov e,a mov a,d mvi d,0 lxi h,FUNTB3 dad d mov e,m inx h mov d,m inx b ral jc NDOSE6 push b lxi h,NDOSE5 push h NDOSE6: xchg pchl FUNTB3: dw 0 ; 0 000h 080h - never called dw SNDHDR ; 2 002h 082h dw RCVPAR ; 4 004h 084h dw SNDFCB ; 6 006h 086h dw CKSFCB ; 8 008h 088h dw RENTMP ; 10 00ah 08ah dw WTDTC2 ; 12 00ch 08ch dw WTDTC8 ; 14 00eh 08eh dw WTDTCP ; 16 010h 090h dw CKSTDK ; 18 012h 092h dw BCSTFN ; 20 014h 094h dw BCSTVC ; 22 016h 096h dw RCVEC ; 24 018h 098h dw GTFCB ; 26 01ah 09ah dw GTFCCR ; 28 01ch 09ch dw GTFCRR ; 30 01eh 09eh dw GTDIRE ; 32 020h 0a0h dw GTOSCT ; 34 022h 0a2h dw GTMISC ; 36 024h 0a4h dw GTLOGV ; 38 026h 0a6h dw LIST1 ; 40 028h 0a8h dw SELDSK ; 42 02ah 0aah dw LSTBLK ; 44 02ch 0ach dw GETVER ; 46 02eh 0aeh dw 0 ; 48 030h 0b0h - to be removed dw RESET ; 50 032h 0b2h dw NWSTAT ; 52 034h 0b4h dw NWCFTB ; 54 036h 0b6h dw SDMSGU ; 56 038h 0b8h dw RVMSGU ; 58 03ah 0bah dw LOGIN ; 60 03ch 0bch dw LOGOFF ; 62 03eh 0beh dw STSF ; 64 040h 0c0h dw STSN ; 66 042h 0c2h dw 0 ; 68 044h 0c4h - to be removed dw CKSTDP ; 046h 0c6h dw CHKMSC ; 048h 0c8h ; hi bit is "end" signal, else keep executing routines in list... ; byte & 07fh is index into FUNTB3, routine to call. FUNTB2: db 080h ; - never called fgtvr equ $-FUNTB2 db 0aeh ; frssy equ $-FUNTB2 db 0b2h ; frsvc equ $-FUNTB2 db 096h ; fsldk equ $-FUNTB2 db 0aah ; fopfi equ $-FUNTB2 db 008h, 00eh, 018h, 09ah ; fdlfi equ $-FUNTB2 db 006h, 098h ; fsrfs equ $-FUNTB2 db 040h, 018h, 0a0h ; fsrnx equ $-FUNTB2 db 042h, 018h, 0a0h ; frdsq equ $-FUNTB2 db 048h, 006h, 018h, 01ch, 0a2h ; READ SEQ fwrsq equ $-FUNTB2 db 048h, 008h, 010h, 018h, 09ch ; WRITE SEQ frefi equ $-FUNTB2 db 008h, 00ah, 002h, 098h ; flgvc equ $-FUNTB2 db 0a6h ; fgtal equ $-FUNTB2 db 012h, 002h, 018h, 0a4h ; fwrpr equ $-FUNTB2 db 012h, 002h, 098h ; fstfi equ $-FUNTB2 db 006h, 018h, 09ch ; frdrr equ $-FUNTB2 db 048h, 006h, 018h, 01eh, 0a2h ; READ RAND fwrrr equ $-FUNTB2 db 048h, 008h, 010h, 018h, 09eh ; WRITE RAND [ZEROFIL] fgtsz equ $-FUNTB2 db 006h, 018h, 09eh ; flkrc equ $-FUNTB2 db 008h, 00ch, 018h, 09eh ; fstpw equ $-FUNTB2 db 094h ; flgin equ $-FUNTB2 db 03ch, 098h ; flgof equ $-FUNTB2 db 03eh, 098h ; fsdnw equ $-FUNTB2 db 0b8h ; frvnw equ $-FUNTB2 db 0bah ; fnwst equ $-FUNTB2 db 0b4h ; fnwcf equ $-FUNTB2 db 0b6h ; fstcp equ $-FUNTB2 ; ***** DUPLICATE of fstpw ***** db 094h ; fsvcf equ $-FUNTB2 db 03eh, 018h, 0a4h ; fgtdl equ $-FUNTB2 db 046h, 098h ; fdkms equ $-FUNTB2 db 046h, 002h, 018h, 0a4h ; flst1 equ $-FUNTB2 db 0a8h flstbk equ $-FUNTB2 db 0ach ; table of message handlers? per BDOS func? ; -1 = ERROR, 0 = PASSTHRU, else index into FUNTB2 FUNTB1: db 0 ; 0 - db 0 ; 1 - db 0 ; 2 - db 0 ; 3 - db 0 ; 4 - db flst1 ; 5 - db 0 ; 6 - db 0 ; 7 - db 0 ; 8 - db 0 ; 9 - db 0 ; 10 - db 0 ; 11 - db fgtvr ; 12 - GET VERSION db frssy ; 13 - RESET DISK SYSTEM db fsldk ; 14 - SELECT DISK db fopfi ; 15 - OPEN FILE db fopfi ; 16 - CLOSE FILE db fsrfs ; 17 - SEARCH FIRST db fsrnx ; 18 - SEARCH NEXT db fdlfi ; 19 - DELETE FILE db frdsq ; 20 - READ SEQUENTIAL db fwrsq ; 21 - WRITE SEQUENTIAL db fopfi ; 22 - MAKE FILE db frefi ; 23 - RENAME FILE db flgvc ; 24 - GET LOGIN VECTOR db 0 ; 25 - GET CURRENT DISK db 0 ; 26 - SET DMA ADDR db fgtal ; 27 - GET ALLOC ADDR db fwrpr ; 28 - WRITE PROTECT DISK db flgvc ; 29 - GET R/O VECTOR db fstfi ; 30 - SET FILE ATTR db fgtal ; 31 - GET DPB ADDR db 0 ; 32 - GET/SET USER CODE db frdrr ; 33 - READ RANDOM db fwrrr ; 34 - WRITE RANDOM db fgtsz ; 35 - GET FILE SIZE db fgtsz ; 36 - SET RAND RECORD db frsvc ; 37 - RESET DRIVE db frsvc ; 38 - ACCESS DRIVE db frsvc ; 39 - FREE DRIVE db fwrrr ; 40 - WRITE RAND ZERO FILL db 0 ; 41 - TEST & WRITE RECORD db flkrc ; 42 - LOCK RECORD db flkrc ; 43 - UNLOCK RECORD db 0 ; 44 - SET MULTISECTOR COUNT db 0 ; 45 - SET BDOS ERR MODE db fdkms ; 46 - GET DISK FREE SPACE db 0 ; 47 - CHAIN TO PROGRAM (***? can't chain to remote program) db fstcp ; 48 - FLUSH BUFFERS db 0 ; 49 - GET/SET SCB ; 50..63 - handled by special case NFTB1 equ $-FUNTB1 ; if any are passed to server, must preserve FUNCOD as real code FUNTBX: db fstcp ; 98 - FREE BLOCKS db fopfi ; 99 - TRUNCATE FILE db 0 ; 100 - SET DIR LABEL ****support?**** db fgtdl ; 101 - GET DIR LABEL BYTE db fgtdl ; 102 - READ FILE DATE-PWD MODE db 0 ; 103 - WRITE FILE XFCB ****support?**** db 0 ; 104 - SET DATE & TIME db 0 ; 105 - GET DATE & TIME - can't support here, use SEND NW MESG db fstpw ; 106 - SET DEF PASSWORD db 0 ; 107 - GET SERIAL NUMBER db 0 ; 108 - GET/SET PGM RET CODE db 0 ; 109 - GET/SET CONS MODE db 0 ; 110 - GET/SET OUT DELIM db 0 ; 111 - PRINT BLOCK db flstbk ; 112 - LIST BLOCK NFTBX equ $-FUNTBX ; CP/Net functions, not known to BDOS FUNTBN: db flgin ; 64 - LOGIN db flgof ; 65 - LOGOFF db fsdnw ; 66 - SEND NW MESG db frvnw ; 67 - RECV NW MESG db fnwst ; 68 - GET NW STATUS db fnwcf ; 69 - GET NW CFG db fstcp ; 70 - SET COMP ATTR db fsvcf ; 71 - GET SERVER CFG NFTBN equ $-FUNTBN FUNTBS: db 0,NFTB1 dw FUNTB1 db CNMIN,NFTBN dw FUNTBN db CXMIN,NFTBX dw FUNTBX dw 0 SNDHDR: lxi h,MSGTOP mvi m,0 ; FMT = CP/Net inx h ; DID (server ID) already set inx h ; SID, our node ID, will be set by SNIOS inx h inx h inx h xchg ; DE = MSGDAT lhld MCRPNT xra a ; negate DE sub e mov c,a mvi a,0 sbb d mov b,a dad b ; HL -= DE mov a,l ora h jz SNDHD1 ; size set already dcx h xchg dcx h mov m,e ; SIZ = length - 1 SNDHD1: lxi b,MSGTOP SDMSGE: call SNDMSG inr a rnz jmp NERROR RVMSGE: call RCVMSG inr a rnz NERROR: lxi h,-1 mov a,h jmp NDEND NDENDR: lda RETCOD NDEND: xchg lhld USTACK sphl xchg mov l,a mov b,h ret RCVPAR: lxi b,MSGTOP call RVMSGE lxi h,MSGDAT shld MCRPNT ret tnextp: ; abandon call to real BDOS lhld USTACK sphl TBDOSP: lhld PARAMT xchg lda FUNCOD mov c,a jmp next CKFCBD: lhld PARAMT mov a,m dcr a jp CKFCB1 call CURDSK CKFCB1: mov e,a mvi d,0 call CHKDSK cpi 0ffh rnz call TBDOSP jmp NDEND CHKDSK: lxi h,CFGTBL+BSDSKS dad d dad d mov a,m ral jc CHKDS1 ; remote disk mvi a,0ffh ret CHKDS1: rar ani 00fh ; remote server disk number inr a mov c,a inx h mov a,m ; remote server node ID sta MSGID ret SNDFCB: call CKSFCB jmp SNDHDR CKSFCB: call CKFCBD ; check FCB disk for local/remote (local does not return) STFCB: call CURUSR lhld MCRPNT mov m,a ; put USR in msg buf inx h mov m,c ; put DSK in msg buf inx h xchg lhld PARAMT inx h xchg mvi b,35 call MCPYTS ; copy FCB to msg buf xra a sta FNTMPF sta F5SETF lhld MCRPNT lxi d,-35 dad d ; point to start of FCB name in msg buf SUBTMP: call CKDOL ; substitute $NN for $$$ at start of name mvi b,0 dad b ; skip rest of 3 chars inx h mov a,m ani 080h ; check f5' attr - partial close/delete XFCBs only inx h jz SUBTM1 mov a,m ani 080h ; check f6' attr - assign passwd/set byte count jnz SUBTM1 dcr a sta F5SETF SUBTM1: lda FNTMPF add a sta FNTMPF inx h inx h inx h CKDOL: mvi c,3 mvi a,'$' CKDOL1: cmp m rnz inx h dcr c jnz CKDOL1 xchg lxi h,FNTMPF inr m dcx d lda CFGTBL+BSRID ; client (slave) ID mov b,a call HEXDIG dcx d mov a,b rar rar rar rar call HEXDIG inx d inx d xchg ret HEXDIG: ani 00fh cpi 10 jnc HEXDG1 adi '0' stax d ret HEXDG1: adi 'A'-10 stax d ret RENTMP: lhld MCRPNT lxi d,-19 dad d jmp SUBTMP MCPYTS: ldax d mov m,a inx h inx d dcr b jnz MCPYTS shld MCRPNT ret WTDTC2: mvi b,2 jmp WTDTCS WTDTC8: mvi b,8 jmp WTDTCS WTDTCP: mvi b,SCTLNG WTDTCS: lhld DMAADR xchg lhld MCRPNT call MCPYTS jmp SNDHDR CKSTDP: lda PARAMT jmp STDSK0 CKSTDK: call CURDSK STDSK0: mov e,a mvi d,000h call CHKDSK cpi 0ffh jnz STDSK1 call TBDOSP jmp NDEND STDSK1: sta MSGID lhld MCRPNT dcr c mov m,c inx h shld MCRPNT ret ; Handle multi-sector count CHKMSC: call CKFCBD ; does not return if disk is local ; From here on, we know the disk is remote call SYSMSC cpi 1 ; skip multi-sector handling if count == 1 rz ; returns to NDOSE5, goto next opcode. sta CURMSC pop h ; NDOSE5 ret addr shld MSCRET pop h ; FUNTB2 pointer (past CHKMSC) shld MSCTBP lda FUNCOD cpi CRREAD jc CKMSC2 ; save rand rec position lhld PARAMT ; FCB lxi b,FCBRR0 dad b mov e,m inx h mov d,m inx h mov a,m sta SAVRR+2 xchg shld SAVRR jmp CKMSC2 CKMSC0: lda RETCOD ora a jnz CKMSC1 lda CURMSC dcr a sta CURMSC jz CKMSC1 lxi h,MSGDAT shld MCRPNT lhld DMAADR lxi b,128 dad b shld DMAADR lda FUNCOD cpi CRREAD jc CKMSC2 ; advance random record number... lhld PARAMT ; FCB lxi b,FCBRR0 dad b inr m jnz CKMSC2 inx h inr m jnz CKMSC2 inx h inr m CKMSC2: lxi h,CKMSC0 push h lhld MSCTBP push h lhld MSCRET pchl ; jmp NDOSE5 - do next opcode. Returns to CKMSC0 when done. ; done with multi-sec read/write, restore everything. CKMSC1: ; could be EOF, or some physical error lda FUNCOD cpi CRREAD jc CKMSC3 ; restore file position... lda SAVRR+2 lhld SAVRR xchg lhld PARAMT ; FCB lxi b,FCBRR0 dad b mov m,e inx h mov m,d inx h mov m,a ; If the program's next op is random read/write, then we are ; finished now. But, if the next op is sequential then ; we must set the file position back to where it started. ; Use READ RAND to set file position. Response is ignored. mvi a,CRREAD sta MSGFUN lxi h,MSGDAT shld MCRPNT call SNDFCB call RCVPAR ; ignore data/error returned by CRREAD CKMSC3: lda CURMSC ; if error ended us early, need num sec completed. mov e,a ; save where SYSMSC won't destroy it call SYSMSC sub e mov h,a ret ; NDENDR BCSTFN: ; broadcast func (set default password, set compat attrs) lxi d,0 call FORALL mov a,c inr c jz RSTALL ; no (more) servers, reset and return sta MSGID lhld PARAMT xchg lhld MCRPNT lda FUNCOD cpi CDEFPW-CBMAX ; a.k.a. 106 - set def password jz BCST1 ; fn 70 - set compat attr mov m,e jmp BCST2 BCST1: mvi b,8 call MCPYTS BCST2: call SNDHDR call RCVPAR jmp BCSTFN BCSTVC: ; broadcast "drive vector" funcs to all servers lhld PARAMT xchg BCSTV1: call FORALL push h mov a,c inr c jnz BCSTV2 ; some remote drives to do call RSTALL pop d lda FUNCOD cpi CRSDSN ; reset drive rnz ; only reset drive is passed to local mov c,a call next sta RETCOD ret BCSTV2: sta MSGID lxi h,MSGDAT mov m,e inx h mov m,d inx h shld MCRPNT call SNDHDR lda FUNCOD sui 38 ; access drive jz BCSTV3 push psw call RCVPAR pop psw pop d dcr a jz BCSTV1 lda MSGDAT sta RETCOD inr a jz RSTALL jmp BCSTV1 BCSTV3: call RCVEC pop d jmp BCSTV1 ; Returns vector of all disks for given server, ; each call skips servers already reported. FORALL: lxi h,CFGTBL+BSDSKS push d lxi d,0 lxi b,010ffh FORAL1: mov a,m ral jnc FORAL6 ; local ral jc FORAL6 ; "already did" flag inx h mov a,c cpi 0ffh jz FORAL2 cmp m jz FORAL3 dcx h jmp FORAL6 FORAL2: mov c,m FORAL3: dcx h mov a,m ori 040h ; mark this one done... mov m,a xthl call RHLR0 jnc FORAL7 xthl mov a,m ani 00fh inr a push h lxi h,1 FORAL4: dcr a jz FORAL5 dad h jmp FORAL4 FORAL5: mov a,e ora l mov e,a mov a,d ora h mov d,a pop h jmp FORAL8 FORAL6: xthl call RHLR0 jnc FORAL7 mov a,h ori 080h mov h,a FORAL7: xthl FORAL8: inx h inx h dcr b jnz FORAL1 pop h ret RHLR0: ora a mov a,h rar mov h,a mov a,l rar mov l,a ret ; Reset from FORALL RSTALL: lxi h,CFGTBL+BSDSKS mvi b,16 RSTAL1: mov a,m ani 08fh ; clear FORALL iterator flag(s) mov m,a inx h inx h dcr b jnz RSTAL1 ret STSF: ; setup Search First mvi a,0ffh sta CURSID ; assume local lhld PARAMT mov a,m cpi '?' jnz STSF1 call CKSTDK mvi c,'?'+080h ; "drive" code with CP/M3 flag call STFCB jmp STSF2 STSF1: lhld MCRPNT inx h shld MCRPNT call CKSFCB ; if remote, set FCB in msg STSF2: lda MSGID sta CURSID call SETSRA jmp SNDHDR STSN: ; setup Search Next lda CURSID cpi 0ffh ; was Search First a local op? jnz STSN1 call TBDOSP jmp NDEND STSN1: sta MSGID call CURUSR lhld MCRPNT inx h mov m,a inx h shld MCRPNT jmp SNDHDR RCVEC: call RCVPAR lxi h,MSGDAT+1 shld MCRPNT mov d,m ; D = ext err code dcx h mov a,m sta RETCOD dcx h mov a,m ; SIZ dcr a mvi h,0 ; ensure H=0 to avoid confusion with extended errors rnz ; not extended error - skip rest call BDERMD inr a jnz NDERR xchg jmp NDENDR NDERR: push d lxi d,NDERRM call PRMSG pop psw ; A = (D), ext err code push psw ; Fix bug in NDOS.ASM call HEXOUT lxi d,NDERR2 call PRMSG lda FUNCOD call HEXOUT call BDERMD pop h ; H = ext err code cpi 0feh jz NDENDR jmp TOP ; abort program HEXOUT: lxi d,HEXMSG+1 ; do low nibble first push psw call HEXDIG pop psw rar rar rar rar dcx d ; back to hi nibble call HEXDIG PRMSG: mvi c,CBUFPR jmp next GTFCB: lda F5SETF inr a jnz GTFCCR GTFCRR: mvi b,35 ; FCB+CR+RR (-drive) jmp GTFC1 GTFCCR: mvi b,32 ; FCB+CR, not RR GTFC1: call RSTMP ; un-do temp file subst lhld MCRPNT inx h xchg lhld PARAMT inx h call MCPYFS mvi h,0 ; ensure H=0 to avoid confusion with extended errors ret MCPYFS: ldax d mov m,a inx d inx h dcr b jnz MCPYFS xchg shld MCRPNT ret RSTMP: ; restore TMP filename lda FNTMPF rar rar jnc RSTMP1 lhld MCRPNT inx h inx h mvi m,'$' inx h mvi m,'$' RSTMP1: ral rnc lhld MCRPNT lxi d,10 dad d mvi m,'$' inx h mvi m,'$' ret GTDIRE: lda RETCOD inr a mvi h,0 ; ensure H=0 to avoid confusion with extended errors rz lhld MCRPNT ; Special case for CP/M3 full search, although really ; any SEARCH that wants to be fully compatible with CP/M ; neuances - specifically that the DMA buffer contains the ; full directory sector after a search. ; ; CP/Net breaks SEARCH funcs 17/18 by only returning ; one DIRENT at a time, while the local BDOS calls ; actually fill the DMA buffer with the directory sector. ; DIR.COM depends on this for getting timestamps. lda MSGSIZ ora a ; 00 = 1 byte, dir code only, DMA buf implied rz ; NDENDR will return dir code to user cpi 32+4 ; anything 1 < x < 128 really, pick a number (expect 32). jnc STOSC0 ; assume 128 bytes, copy all to DMA buffer. ; single DIRENT returned, copy to correct location. xchg lhld DMAADR lda RETCOD inr a lxi b,32 GTDIR1: dcr a jz GTDIR2 dad b jmp GTDIR1 GTDIR2: mov b,c call MCPYFS ret GTOSCT: lda RETCOD ora a rnz lxi h,MSGDAT+37 STOSC0: xchg lhld DMAADR mvi b,SCTLNG call MCPYFS mvi h,0 ; ensure H=0 to avoid confusion with extended errors ret GTMISC: lhld MCRPNT dcx h ; drop error byte lda FUNCOD cpi CGTALL ; get alloc addr jz GTMSC3 ; for alloc vec, just leave in message buffer xchg cpi CFRSP ; get disk free space jz GTMSC4 cpi CGTDPB ; get DPB addr jnz GTMSC1 ; fn 31 - get DPB lxi h,CURDPB push h mvi b,16 ; should be 15 for CP/M 2.2, 17 for CP/M 3 jmp GTMSC2 GTMSC4: lxi h,0 push h lhld DMAADR mvi b,3 jmp GTMSC2 GTMSC1: ; fn 71 - get server config lxi h,CURSCF push h mvi b,23 GTMSC2: call MCPYFS pop h GTMSC3: mov a,l sta RETCOD ret GTLOGV: lxi d,CFGTBL+BSDSKE lxi h,0 mvi b,16 GTLGV1: ldax d dcx d mov c,a ldax d dcx d dad h call DRVSTS dcr b jnz GTLGV1 mov a,l sta RETCOD ret ; Get a drive's status (i.e. GET LOGIN VECTOR) ; B = local drive num ; A = net cfg byte, bit-7 = remote, bit-0:3 = remote drive num ; Returns DE bit-0 = drive's status DRVSTS: push d push b push h ral jc DRVST1 ; drive is local push b call TBDOSP pop b dcr b xchg jmp DRVST2 DRVST1: ; drive is remote rar ani 00fh mov b,a ; remote drive number mov a,c ; server ID sta MSGID lxi h,MSGDAT shld MCRPNT push b call SNDHDR call RCVPAR pop b lhld MCRPNT mov e,m inx h mov d,m DRVST2: ; DE = vector of active drives mov a,b ora a jz DRVST4 DRVST3: ; get drive 'B' bit to LSB mov a,d rar mov d,a mov a,e rar mov e,a dcr b jnz DRVST3 DRVST4: mvi d,000h mov a,e ani 001h mov e,a pop h dad d pop b pop d ret SELDSK: lda PARAMT mvi d,000h mov e,a call CHKDSK cpi 0ffh ; local disk jz TBDOSP ; let BDOS handle call SETDSK lhld MCRPNT dcr c mov m,c inx h shld MCRPNT call SNDHDR jmp RCVEC RESET: ; anything to do? BDOS will be called... but BDOS does no*"#"":""9!+"O#!N#6:"!N#A*O#Ny *O##"O#!N#4"!"6!"6 !"6 :" Z!:"e!:"p:ͳ2" „"!:":"#H!:":"=o& )))A ~ھ+:"=o& )))A  ~ lNͳ2" 4:"=o& )))A *"& ~=*"""!"6#6 !Q#6 :" =*"N{2"*"#""!Q#4!:"X*"N{2"*"#""!Q#5> :"=Œ*""":Q#2"O>҉e͟!"6:"= ¶*""":Q#2"O> ҳ!"6 ͟*""":Q#2"O>͟!"6:" :"=o& )))A ~HF:"=O !" 6> !":"=:"=O !" HqQ͟X͟X͟O!͟OG͟X/  ^:  Q:"s ":"ҁ":"ҏ":"ҝ":"ҫ":"ҵ͝:"ҿ?:"͇:":"!":"!":"͟͟ P:"):"!"6 4 @4:"P:"F!"6  @44:"!"t:"h͟͟ Ø:"҅ "Ø:"Ҙ!"6 ":"ҩ 4:"!";͟  :":"!"6  " ͓ :" :" !"6   "  ͓EB "#GB "#IB "# B "#B " #B " #2"O ! "K!T#p+q*S#""""!!"" ""*"DMS :"Ҙ ͟!!6 C  !͏ > "9!ʬ !"6ñ !"6 !\ K9 :"!:"  e͗ :" ͙ :" 1:"  ͗ :"!!"6 !?!!"6 _ ogi`N#Fogo& og      DIRLBL yd'* ! 9"1>"#2#:Og}**Ip2~w2i#1#":RͶ  :O~!ʫ:<2Ž:"2"x2*# O:ļ:<:G> O*#  :<t   tIw! />! />!*6 #:_#:*Y" Y" Y" >*Y"#####Y"##Y"Y"Yz2*Kg"ɯ22! "*DM 6 :O* 2~  ~ †:<~:2>2:<** "_?:<2>!/:<}:2*  ~b W6 y2>  # vwm>2>! / N *~O²+—">2>!/ *:< "~G # p *~w#  : *8*:*8yO: O*  }O= ~ w#P^#V#ɷ{ozg |g}oh:<͉̉O < O BK BK $ ' - * ! *  ^#V" DD  $$HD @"   @@ $B $$H$H$HH$$! HD$D$D@A D  H  D$!A"       MD :<ʒ ) Õ $ *=[B"=z !;4~t 6!:4k :<$ 7:[G!["G* . [GR}|o> g"I! :Yʨ/0!s*6S#6Y#6M#w!*w:>*2=*! "*%,ʨ/26**j*կ ,,0:?*1::*Z1ͬ2L1͎2**}1}w1>B/a1}|Gd/ :?*ʓ1**+![2* CP/M RMAC ASSEM 1.1 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 : 5O !5 ~#fo: 5O !5 s#r:?*yʟ2š2ͬ2Ž2G:9*29*!:*4>6 :9*L/29*2%#333/3 3333#332E3 3           MXList WAITING FOR PRINTER $PRINTER READY $ 9"111*:ʦy !5:ʺ.~½x:2! x!a{ [_ :  :*1o:*1[:{*/4^4@_!~#s4aĜ2!5_Ĝ!~+w*.+6. DUMP VERSION 3.0 DUMP.COM COPYRIGHT 1982, DIGITAL RESEARCH151282 654321Ҋ ҏ>.Ï_ Ҧ0Ï7Ï͜Ü\  2|::Iͺ>2    : 2  f>2> û>! 6 #=! ~a1{1 w##:Ƃ2*6 2fl:<2! G \  : >2   *|ͫ}*ͫ>:Ï: > ͏> Ï> Ï:_:<2> 2ͺ  >Ï*}o|*!""ͮͷ͇*"͛~ͫ#*}#"%"*̀*}K|K*ͺ- m  1 21 =2#\  :} mͺ2>o:   / \ͺ    1gn~ͻ͙D. :ܰg+":> 2 CP/M 3 DUMP - Version 3.0$ ERROR: File Not Found $ Enter Password: $ Password Error$ ERROR: No Records Exist$ Press RETURN to continue $ ,  ! }2 0 }2(! ! 2 ! ! 2 ! `i}2!, Ì!B Ͷ Hit any key to stop time display Time:  *|ʞ! "! 2 ! 2 ! 2 !4!I! 2 DM! 2 +)^#V!T`i  $`i $!`z`i  K`i K!cz`i  r`i r!fz!i! 2 ! 2 ͈+)^#V!lSunday Monday Tuesday Wednesday Thursday Friday Saturday January February March April May June July August September October November December The date is not set Today is %s, the %x' st nd rd th of %s, 19%x ! 2 ) *^ z|! ! !A !g ! ! ! 9s! 9! M#! 9^ z! ! '! ! 9^ ! 9##s! 9"k ! """*DM`i^ 81 `i#DM+^ !"`i^ 81ʁ*))))`i#DM+^ "*$ ͅ `i^ 81“`i#DM`i^ 81 `i#DM+^ !"`i^ 81*))))`i#DM+^ "*` ͅ `i^ z `i^ `1a  *  !$ " `i^ `1p D * ͅ ! *" `i^ 81V `i#DM`i^ 81 `i#DM+^ !"`i^ 81ʧ *))))`i#DM+^ "*` ͅ `i^ `1a  *  !$ " `i^ `1p  * ͅ ! *"* ͅ ! *" `i^ z *$ 1 ! 4 *! Q *! Q *! Q ! ! Q !"| *^ z ! ! ! 9s! 9! M#! ! 9^ ! 9##s! 9^ zk ! 9" *~ T!"!) ! Q *! !"z The Clock has not been set Please enter the time as hh:mm:ss, The hours are 1-12 for 1 am to noon, 13 through 24 for 1-12 pm : Clock program aborted Please enter the date: mm/dd/yy : %s is not a valid time  ! !" ! 2 DM!  #J) ! 2 PY& ! `i  ! 9^#V! !$  ! 9^#V! ! 9^#V!$ ! 9^#V2 ! 9~#foʣ ! ! ' Clock chip error  ! ! M#! 9^ ! M#!4 ! M# ! 9N#F! 9^#V  0 `i#DM+s 0 `is! 9N#F:ro& |{ !r0! ] #`i~z `i#DM+^ ! M#V !r! !! 9s#r~ `i^ n &  ! 9^#V! ! 9s#r`i#DM+^ #+s#Ò ! 9^#V!S! ! M#+#! 9~#fo)! ! M#r~S#+^ ! M#3 *n & 81b#+^ !"n & 81ʴ*))))#+^ "* Kbn & 81#n & 81b#+^ !"n & 81*))))#+^ "n & 81$#n & 81bn& 81bn& n & ))))"*x Jb*͈"*͈"*͈"* š! Ý! "*+)^#V*Kb*ͱ! Q *ͱ! Q *ͱ! Q *+DM* *+"+)^#V`iDM*N J*+" ?!nPYDMG!mPYDM`i d#! Q ͐*!p %s is not a valid date  ! 9^#V! ! 9^#V!   ! 9^#V! d! 9^#V! ))))! 9Nxog! 9N##~yog COMMANDS CONVENTIONS  3CNTRLCHARS  COPYSYS $ VDATE & dEXAMPLES ( 3DEVICE * :OPTIONS 0 EXAMPLES 5 DIR ? TBUILT-IN B VEXAMPLES F WITHOPTIONS N )OPTIONS Q ~EXAMPLES b jDUMP k ED l KCOMMANDS n 7EXAMPLES  kERASE mOPTION pEXAMPLES lFILESPEC GENCOM eOPTIONS EXAMPLES |GET OPTIONS uEXAMPLES HELP jHEXCOM ZINITDIR LIB *OPTIONS GMODIFIERS *EXAMPLES 7LINK OPTIONS oEXAMPLES MAC EXAMPLES \OPTIONS $PATCH ]PIP (COPY) CEXAMPLES 6OPTIONS &)PUT /'OPTIONS 5MEXAMPLES >-RENAME D9EXAMPLES GRMAC NvOPTIONS PREXAMPLE T\SAVE VzEXAMPLE ZSET `LABEL c_EXAMPLES djPASSWORDS fbMODES i#ATTRIBUTES o&EXAMPLES wDEFAULT |YTIME-STAMPS ~OPTIONS -EXAMPLES ^DRIVES 4SETDEF MEXAMPLES mSHOW WEXAMPLES pSID COMMANDS bEXAMPLES eUTILITIES uSUBMIT 4SUBFILE EXECUTE  PROFILE.SUB  TYPE *EXAMPLES GUSER IEXAMPLES ZXREF $ $ )`$ j" ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor t call 0005 (us)? lxi h,MSGDAT shld MCRPNT ; A: cannot be remote... jmp next LIST1: lxi d,PARAMT lxi b,1 jmp lstbk2 LSTBLK: lhld PARAMT mov e,m inx h mov d,m ; address of data inx h mov c,m inx h mov b,m ; length mov a,c ora b rz lstbk2: lxix CFGTBL+BSLIST bitx 7,+0 jz tnextp lxi h,CFGTBL+BSLIST+9 push d ldx e,+7 mvi d,0 dad d pop d lstbk0: ldax d inx d mov m,a inx h inrx +7 ; dirty == not-zero jm lstbk3 ; send data cpi 0ffh ; stop at 0ffh? or need to continue if more? jz lstbk3 ; this will continue if more chars exist... lstbk1: dcx b mov a,b ora c jnz lstbk0 ret lstbk3: ; must send buffer ldx a,+0 ani 0fh stx a,+8 ; SIZ already len-1, incl LST unit ldx a,+1 ; LST server stx a,+4 ; DID push d push b pushix lxi b,CFGTBL+BSLIST+3 ; MSG buffer call SNDMSG popix pushix mvix 0,+7 ; clear dirty flag, setup for next char inr a jz NERROR lxi b,MSGTOP call RVMSGE popix pop b pop d lxi h,CFGTBL+BSLIST+9 jmp lstbk1 GETVER: lhld scbadr mvi l,scbase+05h mov l,m mvi h,002h mov a,l sta RETCOD ret NWSTAT: call NTWKST sta RETCOD ret NWCFTB: call CNFTBL mov a,l sta RETCOD ret LOGIN: lhld PARAMT mov a,m sta MSGID inx h xchg lhld MCRPNT mvi b,8 call MCPYTS jmp SNDHDR LOGOFF: lda PARAMT sta MSGID jmp SNDHDR SDMSGU: lhld PARAMT mov b,h mov c,l call SNDMSG sta RETCOD ret RVMSGU: lhld PARAMT mov b,h mov c,l call RCVMSG sta RETCOD ret LDERR: mvi a,-1 pop h ret SAVDMA: dw 0 SAVRR: db 0,0,0 MSCRET: dw 0 MSCTBP: dw 0 CURMSC: db 0 DMAADR: dw 0 CURDPB: ds 15 CURSCF: ds 23 ; this is used to do warm boot initialization, since most ; programs do not call BDOS Function 0 but instead just ; JMP 0. The CCP then makes this call, either upon startup ; and/or immediately prior to running a program. ; Perportedly, the CPP calls this with DE=NULL in order ; to scrub RSXs on warm boot. LDOVLY: WARMST: push d push b call NTWKBT ; TODO: any other re-init? reset some context? ; lxi d,wbmsg ; mvi c,CBUFPR ; call next pop b pop d jmp next ; An example of how to process BDOS Func 60 RSX Func 113 ; and remove one's self. CALRSX: mov l,e mov h,d mov a,m inx h cpi 113 ; Check for RSX Func 113 jnz next mov a,m inx h cpi 1 ; Check param count to be sure jnz next push d mov e,m inx h mov d,m lxi h,rsxnam mvi b,8 rsxf0: ; Compare paramter to our name ldax d cmp m jnz rsxf1 inx d inx h dcr b jnz rsxf0 rsxf1: pop d jnz next lxi d,CSTDN mvi c,CBUFPR call next lxi h,next shld start+1 ; only until remove takes place... mvi a,0ffh sta remove lxi h,0 mov a,l ret end vers equ '0g' ; January 20, 1986 11:06 drm "CRT.ASM" ;******************************************************** ; CRT module for the KAYPRO * ; Copyright (C) 1985 Douglas Miller * ;******************************************************** maclib Z80 false equ 0 true equ not false external equ false ;actual driver in EPROM? dev0 equ 200 ndev equ 1 sysctl equ 014h ;status/ctrl bits if not external line25n equ 00100000b crtadr equ 1ch vidctl equ crtadr crtreg equ 1dh viddat equ 1fh sio1 equ 4 keyb equ sio1+1 ; CRTC register addresses curst equ 10 curen equ 11 startH equ 12 startL equ 13 cursrH equ 14 cursrL equ 15 ramioH equ 18 ramioL equ 19 nulla equ 31 ctrlD equ 4 bell equ 7 bs equ 8 lf equ 10 ctrlK equ 11 ff equ 12 cr equ 13 ctrlW equ 23 ctrlX equ 24 ctrlZ equ 26 esc equ 27 rs equ 30 endif extrn @ctbl,@vect cseg ;common memory, other parts in banked. dw thread db dev0,ndev jmp init jmp nullst jmp nullin jmp nullst jmp output dw strcrt dw tblcrt dw modcrt strcrt: db 'KAYPRO ',0,'CRT driver ',0,'v3.10' dw vers db '$' modcrt: db 00000000b,00000000b,10000000b,0 thread equ $ dseg ;banked memory. tblcrt: ;initial value only, copied by BIOS to its table. db 'CRT ',00000010b,0 ;Output, no baud, no protocal init: if not external LXI H,escflg MVI B,12 XRA A L06E0 MOV M,A INX H DJNZ L06E0 lhld 0041h ;gifts from the loader... shld line lhld 0044h ; shld curpos lhld 0046h ; shld starta endif ret nullin: mvi a,1ah ret nullst: ori true ret ; return true if ready if external output: di in sysctl ani 10111111b ori 10000000b out sysctl call 0045h in sysctl ani 00111111b out sysctl ei ret else ;internal CRT driver code: ;CTR controlling code output: LDA escflg ORA A JNZ L09CB ;ESC codes MOV A,C ORA A RZ ;ignore nulls JM L07AE ;Block graphics CPI ' ' JC L0A44 ;CTRL codes ;Displayable char L078F MOV A,C LDED curpos CALL L0998 CALL L09A4 ;advance cursor L079A LDA column INR A CPI 80 JNC L07F7 ;wrap STA column LDED curpos INX D JMP L0815 ;Block graphics codes L07AE LDA attrib ANI 00010000b JRZ L078F ;normal char LDA LFD8C ANI 01000000b JRZ L07C3 MOV A,C ANI 00000001b STA LFD8C RET L07C3 LDA LFD8C ORA A MOV A,C JRZ L07CB CMA L07CB ORI 10000000b LDED curpos CALL L0998 LDA LFD8C MOV C,A LDA attrib ORA C CALL L09A7 MVI A,01000000b STA LFD8C JR L079A ;advance cursor pos L07E6 LHLD curpos LDA column MOV E,A XRA A MOV D,A STA column DSBC D XCHG JR L0815 ;wrap to next line L07F7 CALL L07E6 ; L07FA LDA line CPI 23 JRC L0809 L0801 CPI 24 RZ CALL L088A JR L080D L0809 INR A STA line L080D LHLD curpos LXI D,80 DAD D XCHG L0815 MOV A,D ANI 00000111b MOV D,A XCHG SHLD curpos LBCD starta DSBC B JRNC L0829 LXI D,2048 DAD D L0829 DAD B XCHG LXI B,crtadr + (cursrH shl 8) JMP L0981 L0831 LDA line CPI 24 RZ ORA A RZ DCR A STA line LHLD curpos LXI D,80 DSBC D XCHG JR L0815 L0848 LDA column ORA A JRNZ L085D LDA line ORA A RZ CPI 24 JRZ L0868 DCR A STA line MVI A,80 L085D DCR A STA column LDED curpos DCX D JR L0815 L0868 MVI A,79 STA column LHLD curpos LXI D,79 DAD D XCHG JR L0815 L0877 LDA column CPI 79 JNC L07F7 LDED curpos INX D INR A STA column JR L0815 L088A JMP L0A8C ;set modes L088D LXI H,attrib MOV A,C SUI '0' JRZ L08AB DCR A JRZ L08B0 DCR A JRZ L08B5 DCR A JRZ L08BA DCR A JRZ L08BF DCR A JRZ L08C9 DCR A JRZ L08D7 DCR A JRZ L08DE RET ;Rev Vid L08AB MOV A,M ORI 00000001b MOV M,A RET L08B0 MOV A,M ORI 00000010b MOV M,A RET L08B5 MOV A,M ORI 00000100b MOV M,A RET L08BA MOV A,M ORI 00001000b MOV M,A RET ;Cursor on L08BF MVI C,01100000b ; L08C1 MVI A,curst OUT crtadr MOV A,C OUT viddat RET ;Vid Mode L08C9 LDA attrib ORI 00010000b STA attrib MVI A,01000000b STA LFD8C RET L08D7 LHLD line SHLD LFD7D RET L08DE LDA attrib ORI 00100000b STA attrib RET ;reset mode L08E7 LXI H,attrib MOV A,C SUI '0' JRZ L0905 DCR A JRZ L090A DCR A JRZ L090F DCR A JRZ L0914 DCR A JRZ L0919 DCR A JRZ L091D DCR A JRZ L0922 DCR A JRZ L0934 RET L0905 MOV A,M ANI 11111110b MOV M,A RET L090A MOV A,M ANI 11111101b MOV M,A RET L090F MOV A,M ANI 11111011b MOV M,A RET L0914 MOV A,M ANI 11110111b MOV M,A RET ;Cursor off L0919 MVI C,00100000b JR L08C1 L091D MOV A,M ANI 11101111b MOV M,A RET ;restore cursor pos L0922 LHLD LFD7D MOV A,H ADI ' ' STA LFD7F MOV A,L ADI ' ' STA LFD81 JMP L093D L0934 LDA attrib ANI 11011111b STA attrib RET ;direct cursor control L093D LXI H,0 MOV C,L LDA LFD81 SUI ' ' RC MOV B,A JRZ L0953 CPI 25 RNC LXI D,80 L0950 DAD D DJNZ L0950 L0953 MOV E,A LDA LFD7F SUI ' ' RC CPI 80 RNC MOV C,A STA column MOV A,E STA line DAD B LDED starta DAD D XCHG JMP L0815 L096F LXI B,crtadr + (ramioH shl 8) CALL L0981 DCR C MVI A,nulla OUTP A L097A INP A ORA A JP L097A RET L0981 OUTP B INR C OUTP D DCR C INR B OUTP B INR C OUTP E RET L0992 CALL L096F IN viddat RET L0998 PUSH PSW MOV A,D ANI 7 MOV D,A CALL L096F POP PSW OUT viddat RET L09A4 LDA attrib L09A7 PUSH H PUSH PSW CALL L09BF CALL L096F POP PSW OUT viddat XCHG POP H RET PUSH H CALL L09BF CALL L0992 XCHG POP H RET L09BF LXI H,0801h DAD D MOV A,H ANI 7 ORI 8 MOV H,A XCHG RET ;ESC sequences L09CB LXI H,escflg MVI M,0 CPI 1 JRNZ L09ED MOV A,C ANI 01111111b CPI 'R' JZ L0C06 CPI 'E' JZ L0C9D CPI 'A' RZ CPI 'G' RZ STA LFD7C MVI M,2 RET ;more than 1 in sequence L09ED CPI 2 JRNZ L0A05 LDA LFD7C CPI 'B' JZ L088D CPI 'C' JZ L08E7 MOV A,C STA LFD81 MVI M,3 RET ;more than 2 in sequence L0A05 CPI 3 JRNZ L0A22 MOV A,C STA LFD7F LDA LFD7C CPI '=' JZ L093D CPI '*' JZ L0DA1 CPI ' ' JZ L0DA8 MVI M,4 RET ;more than 3 L0A22 CPI 4 JRNZ L0A2D MOV A,C STA LFD82 MVI M,5 RET ;5 sequential char L0A2D MOV A,C STA LFD80 LDA LFD7C CPI 'L' JZ L0F41 CPI 'D' JZ L0F48 RET L0A3F in keyb+2 ani 00000100b jrz L0A3F mvi a,ctrlD out keyb ret ;CTRL codes L0A44 CPI cr JZ L07E6 CPI lf JZ L07FA CPI bell JRZ L0A3F CPI ctrlX JZ L06A1 CPI ctrlW JZ L06A6 CPI ctrlZ JZ L06F8 CPI bs JZ L0848 CPI ff JZ L0877 CPI ctrlK JZ L0831 CPI rs JZ L075F CPI esc JNZ L078F MVI A,1 STA escflg RET L0A8C LDA attrib ANI 00100000b JRZ L0AC9 L0A93 LHLD starta LXI D,1920 LXI B,80 DAD D MOV A,H ANI 00000111b MOV H,A MOV D,H MOV E,L DAD B MOV A,H ANI 00000111b MOV H,A XCHG PUSH H CALL L0AF0 POP D LXI H,80 CALL L0711 LHLD starta LXI D,80 DAD D MOV A,H ANI 00000111b MOV H,A SHLD starta XCHG LXI B,crtadr + (startH shl 8) JMP L0981 L0AC9 LHLD starta LXI D,80 DAD D MOV A,H ANI 00000111b MOV H,A SHLD starta XCHG LXI B,crtadr + (startH shl 8) CALL L0981 LHLD starta LXI D,1920 DAD D MOV A,H ANI 00000111b MOV H,A XCHG LXI H,80 JMP L0711 L0AF0 MOV A,B ANI 00000111b ORA C RZ L0AF5 PUSH B L0AF6 IN vidctl ORA A JP L0AF6 LXI B,ramioL + (ramioH shl 8) MOV A,B OUT crtadr MOV A,H OUT crtreg MOV A,C OUT crtadr MOV A,L OUT crtreg MVI A,nulla OUT crtadr L0B0F IN vidctl ORA A JP L0B0F IN viddat EXAF MOV A,B OUT crtadr MOV A,D OUT crtreg MOV A,C OUT crtadr MOV A,E OUT crtreg MVI A,nulla OUT crtadr EXAF OUT viddat INX D INX H MOV A,D ANI 00000111b MOV D,A MOV A,H ANI 00000111b MOV H,A L0B35 IN vidctl ORA A JP L0B35 MOV A,B OUT crtadr MOV A,H ORI 00001000b OUT crtreg MOV A,C OUT crtadr MOV A,L OUT crtreg MVI A,nulla OUT crtadr L0B4D IN vidctl ORA A JP L0B4D IN viddat EXAF MOV A,B OUT crtadr MOV A,D ORI 00001000b OUT crtreg MOV A,C OUT crtadr MOV A,E OUT crtreg MVI A,nulla OUT crtadr EXAF OUT viddat POP B DCX B MOV A,B ORA C JNZ L0AF5 JMP L0BFF L0B75 MOV A,B ANI 00000111b ORA C RZ L0B7A PUSH B L0B7B IN vidctl ORA A JP L0B7B LXI B,ramioL + (ramioH shl 8) MOV A,B OUT crtadr MOV A,H ANI 00000111b OUT crtreg MOV A,C OUT crtadr MOV A,L OUT crtreg MVI A,nulla OUT crtadr L0B96 IN vidctl ORA A JP L0B96 IN viddat EXAF MOV A,B OUT crtadr MOV A,D ANI 00000111b OUT crtreg MOV A,C OUT crtadr MOV A,E OUT crtreg MVI A,nulla OUT crtadr EXAF OUT viddat INX D INX H MOV A,D ANI 00000111b MOV D,A MOV A,H ANI 00000111b MOV H,A L0BBE IN vidctl ORA A JP L0BBE MOV A,B OUT crtadr MOV A,H ORI 8 OUT crtreg MOV A,C OUT crtadr MOV A,L OUT crtreg MVI A,nulla OUT crtadr L0BD6 IN vidctl ORA A JP L0BD6 IN viddat EXAF MOV A,B OUT crtadr MOV A,D ORI 00001000b OUT crtreg MOV A,C OUT crtadr MOV A,E OUT crtreg MVI A,nulla OUT crtadr EXAF OUT viddat POP B DCX H DCX H DCX D DCX D DCX B MOV A,B ORA C JNZ L0B7A L0BFF IN vidctl ORA A JP L0BFF RET L0C06 CALL L07E6 LDA line ORA A JZ L0C4F LDED curpos LXI H,80 CPI 23 JNC L0711 CPI 11 JRNC L0C64 XCHG LXI B,79 DAD B MOV A,H ANI 00000111b MOV H,A MOV B,H MOV C,L DSBC D MOV A,H ANI 00000111b MOV H,A PUSH H LDED starta DSBC D JRNC L0C5D LXI H,2048 ORA A DSBC D POP D DAD D MOV A,H ANI 00000111b MOV H,B MOV B,A MOV A,L MOV L,C MOV C,A XCHG L0C4B INX B CALL L0B75 L0C4F CALL L0A93 LHLD curpos LXI D,80 DAD D XCHG JMP L0815 L0C5D MOV D,B MOV E,C MOV B,H MOV C,L POP H JR L0C4B L0C64 DAD D MOV A,H ANI 00000111b MOV D,A MOV E,L LHLD starta LXI B,1920 DAD B MOV A,H ANI 00000111b MOV H,A MOV B,A MOV C,L DSBC D JRNC L0C82 LXI H,2048 ORA A DSBC D DAD B L0C82 MOV B,H MOV C,L LHLD curpos XCHG CALL L0AF0 LHLD starta LXI D,1840 DAD D MOV A,H ANI 00000111b MOV D,A MOV E,L LXI H,80 JMP L0711 L0C9D LDA line CPI 12 JNC L0D4E LHLD starta LXI D,80 ORA A DSBC D MOV A,H ANI 00000111b MOV H,A XCHG LXI B,crtadr + (startH shl 8) CALL L0981 LHLD curpos LBCD starta ORA A DSBC B JRNC L0CD4 LXI H,2048 ORA A DSBC B MOV A,H ANI 00000111b MOV H,A LBCD curpos DAD B L0CD4 MOV A,H ANI 00000111b MOV B,A MOV C,L LXI H,128 DAD B MOV A,H ANI 00000111b MOV B,A MOV C,L LHLD starta LXI D,1840 DAD D MOV A,H ANI 00000111b MOV H,A XCHG LXI H,80 DAD D MOV A,H ANI 00000111b MOV H,A CALL L0AF0 LHLD curpos LXI B,80 ORA A DSBC B MOV A,H ANI 00000111b MOV H,A XCHG LDA column MOV C,A MVI B,0 LXI H,80 DSBC B PUSH D PUSH H CALL L0711 POP B PUSH B LHLD curpos LDA column MOV E,A MVI D,0 ORA A DSBC D MOV A,H ANI 00000111b MOV D,A MOV E,L LHLD curpos CALL L0AF0 POP B LXI H,80 ORA A DSBC B CNZ L0711 LHLD starta LXI B,80 ORA A DSBC B MOV A,H ANI 00000111b MOV H,A SHLD starta POP D JMP L0815 L0D4E SUI 22 JRZ L0D7C JNC L06A1 NEG PUSH PSW LHLD starta LXI D,1839 LXI B,80 DAD D MOV A,H ANI 00000111b MOV D,A MOV E,L DAD B MOV A,H ANI 00000111b MOV H,A XCHG POP PSW PUSH H LXI H,0 L0D72 DAD B DCR A JRNZ L0D72 MOV B,H MOV C,L POP H CALL L0B75 L0D7C LHLD curpos MOV D,H MOV E,L LDA column MOV C,A MVI A,80 SUB C MOV C,A MVI B,0 DAD B MOV A,H ANI 00000111b MOV H,A XCHG CALL L0AF0 LDA column MOV L,A MVI H,0 ORA A CNZ L0711 JMP L06A1 L0DA1 MVI A,0 STA LFD83 JR L0DAD L0DA8 MVI A,-1 STA LFD83 L0DAD LDA LFD7F SUI ' ' MOV E,A LDA LFD81 SUI ' ' MOV D,A L0DB9 MOV A,D CPI 100 RNC ANI 0011b MOV B,A srl on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST. *9>"9>\ d5͍0C\  ͏5!Z>s*9>! =8C "9*9*|9s#r͍0C *Z>& \8DM\ ͔5:j 2j \ v5:9ҁ1 *|9)8"|9:y9ZŠ1a9 ҟ10ñ1g9 ұ10!_>q. *[> :_>w *[> ~!`>q *[> :`>w *[>  *[> ^#VN#FR* *[> 6 *[>^#V! =8"b>?8!a>s1!a>P2 *[> DMv5*a>M1 *[> DM͕6P2 *[> DML5*b>! =8MͲ1 *[>  *[> ͞8ҍ2 *[>  *[> N#Fq#p *[> ~ڮ2 *[> DMB5 *[> 61 *[> N#F *[>  *[> N#F͔51!e>p+q *[> N#F*d>?8^8*[>q#p*[> *[> 8+*[>##q#p*[> *[> N#F^#V?8 *[> s#r *[> N#F`i"h> *[> N#F `i"j>*h>"f>j>f>͞8ڐ3*f>+ *[> ^#V\8DM2_2 *f>"f>\3 *[> ^#V*j>\8DM2 *[>  *[> ͞8Ҿ31 *[> N#F *[>  *[> N#F͏5!n>s+p+q*[>l>͠84 *[> ~4_2*l>DM2ͦ3Ê4*[>##l>͞8Ҋ4 *[> ~34_2*l>DM2:n>j4 *[>  *[> N#FPY͹8d463g4ͦ3Ê4 *[>  *[> ͞8҇41Ê4ͦ3!p>p+q*o>"[>!s>s+p+q*q>DM3 *[> ^#V"]> *[> N#F*q>?8*]>:s>w *[> 6!u>p+q*t>DM 3 *[> ^#V"]> *[> N#F*t>?8*]>~   +5{>.+55OͲ5w66ͩ6́5;6<566́5͕6<>́5͕6<>645͜6<H66! w #ˆ5> Ö5>2,6""6"$6yo`"&6! "*6͋6-66*&6|6 "&6*"6MD6*$6DM:,6 5ͷ6g666Ͱ66**6|6U6*$645*"6 ""6**6#"*6ú5 6**6 ABORTED$NO SPACE$NO FILE: $CANNOT CLOSE$DISK READ ERROR: $DISK WRITE ERROR$Y Y YP      YP  6 YP YP YP YP YP YP   Ͳ ò !>6 #6 ͐6">*>| $7>9ͫ8"|>## *|> ~ !7!>6D7*>|?7!>66 "|>D7!>6:>Y7!~>6#6#6Å7*|>~2~> *|> ~2>:>z7:>2> *|> ~2>!>6 >!>ڰ7*>& v> ~/*>& : w!>4‹7:72"g:^ *:"|> *g:":*9My *9My *9My *~>My *>My *>My *|>":i`N#Fog_ og_ {ozg_ ogDM! >))덑o|gV8 =D8DM! >))k8 =c8_ {ozg^#V) ~8^#V|g}o ˆ8_ {ozgi`N#Fogo& og_ {_z#W LINK 1.31 $01/04/83?MEMRY$MEMRY  X  MEMORY OVERFLOW, USE [A] SWITCH$INSUFFICIENT MEMORY$OVERLAPPING SEGMENTS$      XXABS $$$  XXPROG $$$  XXDATA $$$  XXCOMM $$$ ::;7;  YYABS $$$  YYPROG $$$  YYDATA $$$  YYCOMM $$$ n;;;; INDEX ERROR$MULTIPLE DEFINITION: $MAIN MODULE ERROR$FIRST COMMON NOT LARGEST$COMMON ERROR$UNRECOGNIZED ITEM $  6 #w.6#6 #t#6.wo*.s#r.rͧ ̧ m . ^#V45+ w#w.f.5 \ A "l " l  |F# !( |y 1 Io& 6 "u!'"wu |1~=1#"u!"wu |1~[1#~UC12p#~]1#~1!͛:( (! :( 1!'͛1͹ :( 1!"r2t  y_ !#*r 6$#"r:t<2t  CA  !:tK     !( ͹ =ƒ 223!'K !T6$#6$#6$ y2#K K T2oͦF :p> ::p8:o8> ͽ > ͽz2o:pY>ͽ:RM:RO>2q :pʅ:q2k!Q~wK ' !'[ K s:U:U=2U*V~#"V:R:R=2R*Sw#"S K `!"S>2R  Z>2!"V>2UK     o& 6$    cc K ||:tʒ       ~?#7Invalid: $Error reading input$Error writing output$No file found for input$Error creatinr d srlr d MOV A,E CPI 160 RNC RRC MOV E,A MVI A,1 JRC L0DD1 ADD A L0DD1 INR B DCR B JRZ L0DDA L0DD5 ADD A ADD A djnz L0DD5 L0DDA STA LFD85 MOV A,E ANI 01111111b MOV E,A LHLD starta MOV B,D MOV C,E LXI D,80 INR B JR L0DED L0DEC DAD D L0DED DJNZ L0DEC MVI D,0 MOV E,C DAD D MOV A,H ANI 00000111b MOV D,A MOV E,L SDED LFD86 CALL L0E93 ORA A JM L0E08 CPI ' ' RNZ MVI A,128 L0E08 STA LFD84 LDA LFD85 ORA A JP L0E4A LDED LFD86 CALL L0ED9 STA LFD7C ANI 00000001b JRZ L0E37 LDA LFD83 ORA A RZ LDA LFD7C ANI 11111110b LDED LFD86 CALL L0ECB LDA LFD84 CMA JR L0E6E L0E37 LDA LFD83 ORA A RNZ LDA LFD7C ORI 00000001b CALL L0ECB LDA LFD84 CMA JR L0E6E L0E4A LDED LFD86 CALL L0ED9 ANI 00000001b JRNZ L0E78 LDA LFD83 ORA A JRZ L0E66 LDA LFD85 CMA MOV B,A LDA LFD84 ANA B JR L0E6E L0E66 LDA LFD84 MOV B,A LDA LFD85 ORA B L0E6E ORI 10000000b LDED LFD86 CALL L0E9D RET L0E78 LDA LFD83 ORA A JRZ L0E88 LDA LFD85 MOV B,A LDA LFD84 ORA B JR L0E6E L0E88 LDA LFD85 CMA MOV B,A LDA LFD84 ANA B JR L0E6E L0E93 MOV A,D ANI 00000111b MOV D,A L0E97 CALL L0EA9 IN viddat RET L0E9D PUSH PSW MOV A,D ANI 00000111b MOV D,A CALL L0EA9 POP PSW OUT viddat RET L0EA9 LXI B,crtadr + (ramioH shl 8) CALL L0EBB DCR C MVI A,nulla OUTP A L0EB4 INP A ORA A JP L0EB4 RET L0EBB OUTP B INR C OUTP D DCR C INR B OUTP B INR C OUTP E RET L0ECB PUSH H PUSH PSW CALL L0EE3 CALL L0EA9 POP PSW OUT viddat XCHG POP H RET L0ED9 PUSH H CALL L0EE3 CALL L0E97 XCHG POP H RET L0EE3 LXI H,L0801 DAD D MOV A,H ANI 00000111b ORI 00001000b MOV H,A XCHG RET L0EF1 MOV A,E SUI ' ' MOV E,A MOV A,D SUI ' ' MOV D,A SUB E RZ JRNC L0EFF NEG L0EFF INR A RET L0F01 LXI H,0 MOV A,D ORA A RZ MOV A,E ORA A RZ INX H CMP D JRC L0F10 MOV A,D MOV D,E L0F10 MVI E,0 L0F12 MOV B,H MOV C,L ADD A JRNC L0F18 INR E L0F18 DAD B JRC L0F2F SUB D JRNC L0F2C PUSH PSW MOV A,E ORA A JRZ L0F28 POP PSW MVI E,0 JR L0F2C L0F28 POP PSW ADD D JR L0F12 L0F2C INX H JR L0F12 L0F2F SUB D JRNC L0F35 MOV A,E ORA A RZ L0F35 INX H RET L0F37 PUSH H PUSH D PUSH B CALL L0DB9 POP B POP D POP H RET L0F41 MVI A,0 STA LFD83 JR L0F4F L0F48 MVI A,-1 STA LFD83 JR L0F4F L0F4F LDED LFD81 CALL L0EF1 SDED LFD81 STA LFD8A LDED LFD7F CALL L0EF1 SDED LFD7F STA LFD8B MOV D,A LDA LFD8A MOV E,A CALL L0F01 LDA LFD81 MOV D,A LDA LFD82 CMP D MVI A,-1 JRC L0F81 MVI A,1 L0F81 STA LFD88 LDA LFD7F MOV E,A LDA LFD80 CMP E MVI A,-1 JRC L0F92 MVI A,1 L0F92 STA LFD89 LDA LFD8A MOV C,A LDA LFD8B CMP C MOV B,H MOV C,L LXI H,0 JRC L0FBD JRZ L0FD4 L0FA6 CALL L0F37 LDA LFD80 CMP E RZ LDA LFD89 ADD E MOV E,A DAD B JRNC L0FA6 LDA LFD88 ADD D MOV D,A JR L0FA6 L0FBD CALL L0F37 LDA LFD82 CMP D RZ LDA LFD88 ADD D MOV D,A DAD B JRNC L0FBD LDA LFD89 ADD E MOV E,A JR L0FBD L0FD4 CALL L0F37 LDA LFD82 CMP D RZ LDA LFD88 ADD D MOV D,A LDA LFD89 ADD E MOV E,A JR L0FD4 L06A1 CALL L06CA JR L0711 L06A6 MVI C,23 LDA attrib ANI line25n JRNZ L06B0 INR C L06B0 LDA line SUB C JRNC L06A1 NEG MOV B,A LXI D,80 LXI H,0 L06BF DAD D DJNZ L06BF PUSH H CALL L06CA POP B DAD B JR L0711 L06CA LXI H,80 LDED curpos LDA column MOV C,A XRA A MOV B,A DSBC B RET L06F8 CALL L075F LDA attrib ;reset attributes ANI 11110000b STA attrib ; ; clear rest of screen LDED curpos LXI H,80*25 ANI line25n ;test 25th line JRZ L0711 LXI H,80*24 L0711 LXI B,ramioL + (ramioH shl 8) ; L0714 IN vidctl ;wait for ??? ORA A ; JP L0714 ; MOV A,B OUT crtadr MOV A,D ANI 00000111b MOV D,A OUT crtreg MOV A,C OUT crtadr MOV A,E OUT crtreg MVI A,nulla OUT crtadr L072D IN vidctl ORA A JP L072D MVI A,' ' OUT viddat INX D L0738 IN vidctl ORA A JP L0738 MOV A,B OUT crtadr MOV A,D ORI 00001000b OUT crtreg MOV A,C OUT crtadr MOV A,E OUT crtreg MVI A,nulla OUT crtadr L0750 IN vidctl ORA A JP L0750 XRA A OUT viddat DCX H MOV A,H ORA L JRNZ L0714 RET L075F XRA A STA column STA line LHLD starta XCHG JMP L0815 escflg db 0 line db 0 column db 0 attrib db 0 curpos dw 0 starta dw 0 LFD7C db 0 LFD7D dw 0 LFD7F db 0 LFD80 db 0 LFD81 db 0 LFD82 db 0 LFD83 db 0 LFD84 db 0 LFD85 db 0 LFD86 dw 0 LFD88 db 0 LFD89 db 0 LFD8A db 0 LFD8B db 0 LFD8C db 0 endif end  org 0100h mvi a,23 sta lcount lxi d,005ch mvi c,0fh call 0005h inr a jz error lxi d,0080h mvi c,01ah call 0005h rdloop: lxi d,005ch mvi c,014h call 0005h ora a jnz done lxi h,0080h mvi d,080h outloop: mov a,m inx h cpi 01ah jz done push h push d cpi 00ah jnz notlf mvi e,00dh mvi c,002h call 0005h mvi e,00ah mvi c,02h call 0005h lda lcount dcr a sta lcount cz more jmp waslf notlf: mov e,a mvi c,002h call 0005h waslf: pop d pop h dcr d jnz outloop jmp rdloop done0: pop h ; discard return addr done: lxi d,005ch mvi c,010h call 0005h ret error: lxi d,errmsg mvi c,09h call 0005h ret more: mvi a,23 sta lcount lxi d,moremsg mvi c,09h call 0005h mvi c,01h call 0005h cpi 0003h; Ctrl C jnz clearmsg pop h ; ret addr pop h ; saved DE pop h ; saved HL lxi d,crlf mvi c,09h call 0005h jmp done clearmsg: lxi d,clrmsg mvi c,09h call 0005h ret lcount: db 23 errmsg: db 'No File' crlf: db 13, 10, '$' moremsg: db 'MORE:$' clrmsg: db 13, ' ',13,'$' end ; This program can be used to remove an RSX that is persistent. ; The RSX must trap function 60 (CALL RSX) and honor sub function 113. ; The RSXPB is defined as: ; ; rsxpb: db 113 ; function code ; db 1 ; num params ; db name ; param: name of RSX to remove ; ; name: db 'TOREMOVE' ; must be 8 chars, blank padded ; ; This program expects the CCP to format the single commandline ; parameter into the default FCB, which will produce an 8-char ; (actually, 11) blank padded field. ; ; Usage: RSXRM ; Example: RSXRM RSXTEST ; ; A compatible RSX must accept BDOS Function 60 RSX Function 113, ; compare it's name to the parameter, and if matching then set ; it's own REMOVE flag. ; ; See RSXTEST.ASM for an example, in the RSXFUN routine. ; org 100h start: lxi d,rsxpb mvi c,60 call 5 jmp 0 rsxpb: db 113 db 1 dw 005dh end ; Translate text file between CP/M and Unix line-ends maclib z80 WBOOT equ 0000h BDOS equ 0005h CMDLINE equ 0080h CR equ 13 LF equ 10 EOF equ 26 CONOUT equ 2 PRINT equ 9 OPEN equ 15 CLOSE equ 16 SERFST equ 17 SERNXT equ 18 DELETE equ 19 READ equ 20 WRITE equ 21 MAKE equ 22 RENAME equ 23 SETDMA equ 26 SETATR equ 30 PARSE equ 152 BUFLEN equ 128 org 0100h jmp start infile: ds 36 outfile: ds 36 tmpfile: ds 36 sawcr: db 0 conv: db 0 bytcnt: db 0 flptr: dw 0 flcnt: db 0 pfcb: dw 0 ; text to parse dw 0 ; output FCB ; TODO: support things like A:=B:*.asm[u] start: lxi sp,stack lxi d,CMDLINE ldax d inx d ora a jz help mov l,a mvi h,0 dad d mvi m,0 ; ensure NUL terminated xchg shld pfcb lxi h,outfile shld pfcb+2 lxi d,pfcb mvi c,PARSE call BDOS mov a,h ana l cpi 0ffh jz parerr mov a,m ; HL point to next, unparsed, char cpi '=' jnz parerr inx h shld pfcb lxi h,infile shld pfcb+2 lxi d,pfcb mvi c,PARSE g temp$Error renaming temp$ Usage: TR A:{outfile}=B:infile[U|C]$Copying -$ $ A63D5 :1001300001E5D5FE0AC253011E0D0E02CD05001EBB :100140000A0E02CD05003AA3013D32A301CC750190 :10015000C359015F0E02CD0500D1E115C22A01C3CA :100160001901E1115C000E10CD0500C911A4010EAA :1001700009CD0500C93E1732A30111AE010E09CD0C :1001800005000E01CD0500FE03C29A01E1E1E11177 :10019000AB010E09CD0500C3630111B4010E09CDF9 :1001A0000500C9174E6F2046696C650D0A244D4F36 :0C01B00052453A24 COM A2B˼KAYPRO Winchester Disk Interface 3.100c$ D e?S[ú x2( :((?:A2( KAYPRO CP/M 3.101a (c) 1985 DRI and DRM $ No CCP$ CCP  $> | (*** $> ( | G({.x:A( s.1._> #Wo> g2AG> Y !! ^#VA** $J>| **9(>M*** @>y$A{CM^#V#zy8#0#!nodev nodev nodev nodev nodev nodev nodev nodev  M sC1C!4!~#|~(5 #~#fo~ +6#### > *}D 0000000000000000001R *SmwrXZ#]bg~ÃÜrÒ/×ï) n× Rb @ à  1 O  j$   | Ãà à à BB     +"}{_}o>2~77ø~7"9:OG#Q{ozg# "" !2*%DM**ѵ+))  H~#+}#<:<ʲ<77:<ʢ =2(*f*(}DɯQ"(>QKQKQ>Q"%Q!*$ K*"x!*! @$@hK\K:K ~#~ w* NK* NK^#V#N#F!x>QGQx3ڰbڼqҼo5p5"""*!yb! ~G*!N Kկ2}!,"** NK6  :+O K2$^#V#N#FxNp:$p:Gjxj Y# A>QFQ KK{<<ʽ! ~6 69BK! OS $ N wy! "(9"f1f! Ҕ2! ~#foCOPYRIGHT (C) 1982, DIGITAL RESEARCH 151282 >2\  2   š  c  No File $MORE:$ $  :( 1!'͛1͹ :( 1!"r2t  y_ !#*r 6$#"r:t<2t  CA  !:tK     !( ͹ =ƒ 223!'K !T6$#6$#6$ y2#K K T2o~0_W~@G+~悳_##N >yAyQNˑV~ 0=y(NxeN yxy(NyeN++ >yx+8 xAyQ-ְ!wgNO ~ɯA(y>DCE DTE MODEM xO_ P!S! e+~ xzy{>ܯ+| ɯ22*J KEYBD !~~0_W~@G+~悳_##N >y܂W:܃_4M:  :ܑ0DGP ! 4 )!P [:OGBͫ:2[! (!`xzWy{>y>[S2W:_$:W:ܺ>8>2:_:ܻ>8>2:O:ܹDM! 8(.Z:ܻ:܃_ 0:܂WZ:ܺ:܂W 0:܃_Z:ܺ:Ϳ!6|g{ _z W0D 2>2 [S2ܷ( :/G:ܠ:G:ܰ[:ܷ( :G:ܰ:/G:ܠzWzW >yxA Q A Y2{_*BKP  Y|W]Sͻڷ0 >2:ܷr[2(:ܷ:[:/7:ܷ::/$[ #:D*/P |W] |g! = DM͠*T]:O>PO |g:o& ] > 2>2: _: WzdG::{_>8(GM! |GM*0|g!P |g*P B|g:O !P B]*:_ R|W]*!P B]*P B|g"J(* P JPYDM|W]* |gGMR0! R DM**0|W]!P ]: y*P R|g Ͷ*KܷB0! B|gK |xzy{>++ x¥*:ܷz[!P ] 0DO |gDMR|g[R0#! R|`G}iO͠;*xzy{> x *xx|y}>xzy{>#zW|gx|y}>ӿ Ͷ*|g!P ]x!x|y}>:xzy{>#zW|g`x|y}>x /( D} ʬ fʫ>2: (6*P |gT] |g!P ]*P |g" ö*P |g"  yR1EAG26 :BCy26 y2:=r* 6 y26y2:LdDk(> P _: PO2{2 [JͶ >yxA Q A YͤzWͤ:ͤ!|g!62>@2*": 2!y0(=(=(=(=(=(=(!=(0~w~w~w~w ~w*| 2} 2r:2! M: G( :ܷ(=2>P=2[>O2*O :O,[<2÷!y0(=(=(=(=(=(%=(0=(4~w~w~w~w`> y:[:O:ܱ>@2*:_W2R:8Ϳ<2*P zW"KB0  ö:ȷ=2*P R: CRT  ! w#*A "*D "*F ">:ܷy {y[:  .HG - G> >:wӰ082c>:O滱   N(>2~!y6#6 e:Oy:gx0XDol( ˠG .G %- oCg}:c0|!y 57!y#57~ 0 >bC { 7ɯO&  { % 7ɷO*q >_#> W2~*{N#~/ 2͟:Ʒ &*{:Ʒ F(2~ s1:~O!^O F#N#fi !:lO*{# *{#~!Ɔj2c[sR:c :ӷ :~ <> (!x5~ :ӷ _р  { 222 2eC:c0 ( *{#nʧˮ>28>2x*o##"{ͮ:8:<:ӷ > 2!ͮ*{n(#n(:82c@ O(G(*oia*qq pn f *  *~G ?[ q#p>2!6 ͟88HGG < q]   š  c  No File $MORE:$ $ 021000032A9903234ECD4D03013401CD2803CD8C :1002200036034FCD4D03014D01CD2803AF32970367 :100230003298033A9803FE10D296026F26002923C3 :1002400023EB2A9903197EE680CA8F02E53A9703C9 :10025000B7C4420321970334016001CD28033A98C3 :1002600003C6414FCD21030E3ACD21030 ͕&$ %ۄ ۅ1( >Ӆ>1ӄ>pӇ>ӆ& ۇw}& ۇ/} &$ M1&$ &ۇ_ } ͱ(ۇG ɯ<& } ˏ& `ۇ( } =2>ہ( w͡ ͡(>Ӈͱ(ۇG կ2>ɯӆz:@3 }(  }8o<:@U [} xʻ }ӄ|Ӆ:Ӄ>ӂ> 2?i(H:?Ӈͱ(>ۇG 8_(4>02?i(%:?Ӈ G̯ӄӅ<ӂ>Ӄ> ӇͱG.ۀ x !ۀ *"*" :>:@U> *o~<<_ !~#fo"ʯ*o#F:ӆ͡>Ӂ* 2>:P 2@!:@U! "":ӆ 9 = A &$  &$ D=2>22ɯ d( ! 7 % F ) U - 1 s 5 Å 2* "*""*o~ ###v(~!O N#fi{*m:?O!~O/q!> !ŷ!:ƆwK:ƹ! ~#fo#))MD*B8"* "! q#p#6^#V+*o~i7*qq#p N#fi  C C"Cs:A2i`z n& +:Ʒ88:jO ! [qs#r! :jO ! ^#VSq*o ~ #>(#~(>MOG#n( !C[q! N#F ! F?2! ~#, &$ y2j!R ~(k2kOC͗8a2l"m ^#V#N#F:lo& "o@ AO :lO "q88)2>͵ŷ  A~$# w++~'w0#~'w+ GOxGd0d 0 !!!! ! 2{Ͷ2:ͨW:ͨB(0 O= 0 :ͨ88O:ͨG ??OUD (0y xy(DGy<2> >$ !> g"::2:2:2*m>2 x 7R0x >27ZxNd8dͶ2xͶ2!{Oz 8 YW#x 8xͶ2 A$w#Y$  :!þܐ:2:2:2>2:ͨG:x(dNG2! m :ͨO :ͨ=(Go 2 !" *"  !  @ ) !  @ ) !  @ )!~((#### y p#q#s#ro ͏v ʍ !O:2B ͏|>2z͏<2 ͏@,͏z͏|2y2 fÇ| f*u|Ç:yG 8!  )>2 Gy ҳs#r#<GyOx !  N#fiOf”ïfM  *"*}"*"*"*"!x :|  1!|G^>">"!}">">"!E"> $> >$>O#>#>J!!}#>!}!}!^#V#z~##ںO +~#!ɀ T NDOS3   NDOS3 COPYRIGHT (C) 1980-82, DIGITAL RESEARCH NDOS Err $, Func $ $Init err$ ! ">2  ¼!e"2!g"1 "`D  : *`.~*`.~*`.~**`.s#r*`.:w*`.~*`.~#foNDOS3 Started. $NDOS3 Ending. $y22e ; < 2 !y ##ڗ##~‚ s1O~#fo":" !f6 #"GW ^&! !0 W_z !^#V! gm 7  Y Y f m u  ?@BHH HH <>>FF N    $' */44/ 77 J D D HH ; O<>@ABCDE 2@b !b6 #####*O> G }++sb <% $# ¹!4:+ Gx 07*Ów#"  * *:!3_ O2*2c* q#"52 " " :!ڬ*! ^#V#~2 " ì:¸: =2 ʸ!g"*  " :!ڬ*! 4¬#4¬#4!q* * :!: * *! s#r#w>!2e!g"g: _g ry 2c**:8s*ry <:%O 22c!gs#r#":&k=!:g2<!7!!,  ~Ҽڼ#yʔʕ+üN+~@w~2_*~?p *#"m:c2_:_%*2c*#w#"!h"V+~2+~=&  J ! P ! * P ! Ͱ}2K ! O)s a }2ڄ *à Gy2c!g"*^#Vxʯ zW{_¥  {_: _O*)* q#"7!g"  *^#V#N#Fy!N ~&!W ^ w#4% % x ~ w~wQ  6 <b!W  *`.n&}2 2 }2*~2c#*:2c*DM 2*DM% 2> J kb~#q ~# ^#V! # U ! ">2! }  8!* >w : O y xw2U :* G2* x!* `i:+ w: OF x>`i: O x/ F x>: Oyx B"I !@  BB$$  UUUUUTUUE @ @ H @I$ $@  $I$IH"$$ D"I HHB"!$@$ $"IH"@$H @   $BI$I"$$A@!"  DD A H! D@DD !$I$   H HH @ @HI  "@   A63D5 :1001300001E5D5FE0AC253011E0D0E02CD05001EBB :100140000A0E02CD05003AA3013D32A301CC750190 :10015000C359015F0E02CD0500D1E115C22A01C3CA :100160001901E1115C000E10CD0500C911A4010EAA :1001700009CD0500C93E1732A30111AE010E09CD0C :1001800005000E01CD0500FE03C29A01E1E1E11177 :10019000AB010E09CD0500C3630111B4010E09CDF9 :1001A0000500C9174E6F2046696C650D0A244D4F36 :0C01B00052453A2448 i  i : 0 ' 0x[[0 C))))o? <Xa_ Ɛ'@'^#V#Nx{y!myƒ#RҙR x'Gy!y¦!4 ++~#foR}ҨDx/ / xO  ~#O: ~#O: ~O  ; Z x 0N  < [ y 1O  "}! N#~ U# Gi! 4e Y}2 1 "*>ʘB C ï8Ea*X !   !j    Time was set to: $Error retrieving network time.$This program requires BDOS >= 3.0.$:O yx2 `i:OF x>`i:O xk F x> :2c*DM 2*DM% 2> J kb~#q ~# ^#V! # U ! ">2! }  =:<>w##~2 4~?ɫ̓¹:<ɫɫüީAX2rK:w++~=wv4͗O5:2X!"*>o+"v *!b"ݦ": r#~?w#>r# L=J Lv  wȾbܟ?~O ͆ګ†wŒ~è# # x ͗w ٪ڪ٪ڪw@ ~wb͐Úݤ! x>w~6 :6~#+w#w+ ~;wɯ2KOFq-yl?Np g:ʓ~( ȾˆʀHÈ2xą  ):@ΩO~#w͚ʀô̓b_++V@* )͗Os++r ~Gw# * #~$%+@*9>  #>? ;*~ w-xąH"0 *ĊHEʀ@~›:6¦w͚ ̋ȾÇPY*{zBKNyʺ Nú2: *~w *" ݦ2>ʄ@~k:(s~*9~Ês~Բ~ͅ<call BDOS mov a,h ana l cpi 0ffh jz parerr mov a,m ; HL point to next, unparsed, char cpi '[' jnz parerr ; make this optional, default is no conversion? inx h mov a,m ani 0dfh ; toupper cpi 'U' jz convok cpi 'C' jnz parerr convok: ani 010h ; 0=to-cp/m, ~0=to-unix sta conv inx h mov a,m cpi ']' jnz parerr inx h mov a,m ora a jnz parerr lxi h,infile call chkafn jnc multcp lda outfile+1 cpi ' ' jnz noblank lxi d,outfile+1 lxi h,infile+1 lxi b,11 ldir lda outfile+1 cpi ' ' jz parerr noblank: lxi h,outfile call chkafn jnc parerr call trfile ; errors abort, do not return here jmp WBOOT multcp: lda outfile+1 cpi ' ' jnz parerr ; make list of matching files, then ; translate each one... lxi h,flist shld flptr xra a sta flcnt lxi d,inbuf mvi c,SETDMA call BDOS lxi d,infile mvi c,SERFST call BDOS cpi 0ffh jz inofile serloop: rlc rlc rlc rlc rlc ; * 32 mov e,a mvi d,0 lxi h,inbuf dad d inx h xchg lhld flptr xchg lxi b,11 ldir xchg mvi m,'$' inx h shld flptr lda flcnt inr a sta flcnt lxi d,0 mvi c,SERNXT call BDOS cpi 0ffh jnz serloop ; got list of 'flcnt' files at 'flist' ; There must be at least one if we get here... lxi d,cpying mvi c,PRINT call BDOS lxi h,flist lda flcnt floop: push psw push h lxi d,fprefx mvi c,PRINT call BDOS pop d push d mvi c,PRINT call BDOS pop h push h lxi d,infile+1 lxi b,11 ldir lxi h,infile+1 lxi d,outfile+1 lxi b,11 ldir call trfile pop h pop psw lxi b,12 dad b dcr a jnz floop jmp WBOOT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Translate file infile => outfile trfile: xra a sta infile+12 sta outfile+12 lxi h,outfile lxi d,tmpfile lxi b,16 ldir lxi h,tmpfile+9 mvi m,'$' inx h mvi m,'$' inx h mvi m,'$' ; FCBs all setup. lxi d,infile mvi c,OPEN call BDOS cpi 0ffh jz inofile xra a sta infile+32 lxi d,tmpfile mvi c,DELETE call BDOS lxi d,tmpfile mvi c,MAKE call BDOS cpi 0ffh jz mkerr sta sawcr call infill call outinit chrloop: call getchr cpi EOF jz ineof mvi d,0 cpi CR jnz notcr lda conv ora a jnz chrloop ; to-unix: drop all CR inr d mvi a,CR notcr: cpi LF jnz notlf lda conv ora a jnz crlfok ; to-unix: do not add back CR lda sawcr ora a jnz crlfok mvi a,CR call putchr mvi d,0 crlfok: mvi a,LF notlf: push d call putchr pop d mov a,d sta sawcr jmp chrloop ineof: lda conv ora a jnz done0 ; Unix file, set byte count instead... ineof0: mvi a,EOF call putchr ; fill buffer and force flush... lda outcnt ora a ; zero means next putchr will flush... jnz ineof0 done0: lda outcnt mov c,a mvi a,BUFLEN sub c sta bytcnt ; 0..128 call outflush ; flushes full 128 byte record done: ; close all and rename tmpfile... call closeall lda conv ora a jz iscpm lda bytcnt sta tmpfile+32 lxi h,tmpfile+6 mov a,m ori 80h mov m,a lxi d,tmpfile mvi c,SETATR call BDOS ; trim file back to exact byte count ; check error? aborting doesn't help iscpm: lxi d,outfile mvi c,DELETE call BDOS ; check error? do anything different? lxi h,outfile lxi d,tmpfile+16 lxi b,16 ldir lxi d,tmpfile mvi c,RENAME call BDOS cpi 0ffh jz renerr ret getchr: lda incnt ora a cz infill lda incnt dcr a sta incnt lhld inptr mov a,m inx h shld inptr ret putchr: push psw lda outcnt ora a cz outflush lda outcnt dcr a sta outcnt pop psw lhld outptr mov m,a inx h shld outptr ret outflush: lxi d,outbuf mvi c,SETDMA call BDOS lxi d,tmpfile mvi c,WRITE call BDOS ora a jnz outerr outinit: lxi h,outbuf shld outptr mvi a,BUFLEN sta outcnt ret infill: lxi d,inbuf mvi c,SETDMA call BDOS lxi d,infile mvi c,READ call BDOS ora a jz inok cpi 1 jnz inerr mvi a,EOF ; should never happen for text files, but handle anyway sta inbuf inok: lxi h,inbuf shld inptr mvi a,BUFLEN sta incnt ret closeall: lxi d,tmpfile mvi c,CLOSE call BDOS lxi d,infile mvi c,CLOSE call BDOS ret parerr: lxi d,perrm mvi c,PRINT call BDOS lxi d,CMDLINE ldax d inx d mov l,a mvi h,0 dad d mvi m,'$' mvi c,PRINT call BDOS help: lxi d,usage mvi c,PRINT call BDOS jmp WBOOT mkerr: ; infile open, partial cleanup lxi d,merrm jmp abort inerr: ; both files open lxi d,ierrm jmp abort outerr: ; both files open lxi d,oerrm abort: push d call closeall lxi d,tmpfile mvi c,DELETE call BDOS pop d jmp errmsg renerr: ; files are all closed, no cleanup lxi d,rerrm jmp errmsg inofile: ; files not open yet, no cleanup lxi d,nerrm errmsg: push d lda flcnt ora a jz nocrlf mvi e,CR mvi c,CONOUT call BDOS mvi e,LF mvi c,CONOUT call BDOS nocrlf: pop d mvi c,PRINT call BDOS jmp WBOOT ; Check for '?' (ambiguous file name) in FCB HL ; Return CY set if unambiguous chkafn: mvi b,13 qchk: mov a,m cpi '?' rz inx h dcr b jnz qchk stc ret perrm: db 'Invalid: $' ierrm: db 'Error reading input$' oerrm: db 'Error writing output$' nerrm: db 'No file found for input$' merrm: db 'Error creating temp$' rerrm: db 'Error renaming temp$' usage: db CR,LF,'Usage: TR A:{outfile}=B:infile[U|C]$' cpying: db 'Copying -$' fprefx: db CR,LF,' $' outcnt: db 0 outptr: dw 0 incnt: db 0 inptr: dw 0 stack equ $+64 outbuf equ stack inbuf equ outbuf+BUFLEN flist equ inbuf+BUFLEN end D LINE 01BE C2F606 JNZ ENDERR ; BAD COMMAND LINE IF NON-ZERO 01C1 3A7D0D LDA NEWARG ; GET THE DATA FLAG 01C4 B7 ORA A ; ZERO IF DATA WAS ENTERED 01C5 C2E101 JNZ OUTMOD ; IF NONE, OUTPUT THE MODE DATA 01C8 CDD705 CALL GETMOD ; GET THE MODE BYTE 01CB FEFF CPI 0FFH ; CHECK FOR ERROR 01CD CAD006 JZ NODRV 01D0 FEFE CPI 0FEH ; CHECK FOR WRONG RELEASE 01D2 CAD606 JZ WRONG 01D5 7E MOV A,M 01D6 E680 ANI 80H ; CHECK MODE BYTE DISABLE BIT 01D8 C2E206 JNZ FIXED 01DB CD8303 CALL UPMODE ; UPDATE THE MODE BYTE 01DE CDA706 CALL RESET ; RESET THE DRIVE 01E1 CDD705 OUTMOD: CALL GETMOD 01E4 FEFF CPI 0FFH ; CHECK FOR DRIVE NOT AVAILABLE 01E6 CAD006 JZ NODRV 01E9 FEFE CPI 0FEH ; CHECK FOR WRONG RELEASE 01EB CAD606 JZ WRONG 01EE 7E MOV A,M 01EF E680 ANI 80H ; CHECK NODE BYTE DISABLE BIT 01F1 C2E206 JNZ FIXED 01F4 CD9104 CALL MPRINT ; AND PRINT THE NEW MODE VALUES 01F7 C3FE06 JMP DONE ; AND WE'RE DONE 01FA 218000 SPCHK: LXI H,DMA ; NUMBER OF CHARACTERS INPUT 01FD 7E MOV A,M 01FE B7 ORA A 01FF C8 RZ ; NO CHARACTERS AVAILABLE 0200 23 INX H 0201 22760D SHLD CMDPTR 0204 4F MOV C,A 0205 0600 MVI B,0 0207 09 DAD B 0208 3600 MVI M,0 ;TERMINATE COMMAND TAIL WITH A NULL 020A 2A760D LHLD CMDPTR 020D CD1B02 MORSP: CALL CHAR 0210 FE20 CPI ' ' ; AND CHECK FOR SPACES 0212 CA0D02 JZ MORSP 0215 2B DCX H 0216 22760D SHLD CMDPTR 0219 B7 ORA A ;[ZR] IF A NULL (END OF STRING) 021A C9 RET ; ZERO IF NO ARGUMENTS 021B 7E CHAR: MOV A,M ;RETURNS [CY] IF NOT END OF STRING 021C B7 ORA A 021D C8 RZ ;END OF BUFFER 021E 23 INX H 021F FE61 CPI 'a' 0221 D8 RC 0222 FE7B CPI 'z'+1 0224 3F CMC 0225 D8 RC 0226 D620 SUI 'a'-'A' 0228 37 STC 0229 C9 RET ; PARSES INPUT COMMAND LINE ; 022A 3E01 INCMD: MVI A,1 022C 327D0D STA NEWARG ; INITIALIZE ARGUMENT FLAG TO NONE 022F 2A760D LHLD CMDPTR ; POINTER TO FIRST NON-BLANK CHARACTER 0232 CD1B02 CALL CHAR ; GET IT 0235 D27F03 JNC BADCMD 0238 FE41 CPI 'A' ; CHECK RANGE OF A-P 023A DA7F03 JC BADCMD 023D FE51 CPI 'P'+1 023F D27F03 JNC BADCMD 0242 32C10C STA NODRMS ; SETUP ERROR MESSAGES ETC. 0245 32EA0B STA DSKLT 0248 32B909 STA DIFD 024B 32EC0C STA WRGD 024E D641 SUI 'A' ; MAKE A DRIVE NUMBER (0-15) 0250 47 MOV B,A ; AND SAVE IN B 0251 CD1B02 CALL CHAR ; GET A CHARACTER 0254 D27F03 JNC BADCMD 0257 FE3A CPI ':' ; WHICH MUST BE A ':' 0259 C27F03 JNZ BADCMD 025C 78 MOV A,B ; GET DRIVE 025D 327E0D STA NDRIVE ; SAVE FOR LATER 0260 CD1B02 NXARG: CALL CHAR 0263 D0 RNC 0264 FE20 CPI ' ' 0266 CA6002 JZ NXARG 0269 2B DCX H 026A E5 NXOPT: PUSH H ; GET ADDRESS OF FORMAT STRG TBL IN DE 026B CD7D04 CALL SERDP 026E EB XCHG 026F E1 POP H 0270 0E00 MVI C,0 ; C = FORMAT BIT NUMBER COUNTER 0272 0608 CONFIG: MVI B,8 ; LENGTH OF ENTRY IN FORMAT STRING TABLE 0274 E5 PUSH H 0275 79 MOV A,C 0276 FE0F CPI 15 ; IF C = 15 THEN END OF TABLE 0278 CAB402 JZ NOTCNF ;NMEMONIC NOT FOUND 027B 1A LDAX D 027C BE FIG0: CMP M 027D C2AC02 JNZ FIG1 0280 23 INX H 0281 13 INX D 0282 05 DCR B 0283 CA8C02 JZ FIG5 0286 1A LDAX D 0287 FE20 CPI ' ' 0289 C27C02 JNZ FIG0 028C 7E FIG5: MOV A,M 028D B7 ORA A 028E CA9B02 JZ FIG2 0291 FE2C CPI ',' 0293 CA9B02 JZ FIG2 0296 FE20 CPI ' ' 0298 C2AC02 JNZ FIG1 029B D1 FIG2: POP D ;DISCARD OLD BUFFER POIN:10010000C36D0100000D0A4D4F44452076332E315A :100110003036200D0A0A24075265717569726573BD :100120002043502F4D20332E31206F72204D502F01 :100130004D0D0A240747455444502E52454C206E1D :100140006F74206C696E6B656420696E746F2073C8 :10015000797374656D0D0A24ED7B840D1117010E02 :1001600009C30500ED7B840D11340118F2ED738491 :100170000D31A60D1105010E09CD05000E0CCD05A2 :10018000007DFE30DA58017C2A0100FE01C2950193 :10019000235E2356EB22030101650009CDCB06ED5A :1001A0005B0301AF5FED52CA6401CDFA01C2BB012E :1001B000110C070E09CD0500C3FE06CD2A02C2F6BA :1001C000063A7D0DB7C2E101CDD705FEFFCAD006C4 :1001D000FEFECAD6067EE680C2E206CD8303CDA728 :1001E00006CDD705FEFFCAD006FEFECAD6067EE6BD :1001F00080C2E206CD9104C3FE062180007EB7C80E :100200002322760D4F06000936002A760DCD1B02FB :10021000FE20CA0D022B22760DB7C97EB7C823FE79 :1002200061D8FE7B3FD8D62037C93E01327D0D2AEA :10023000760DCD1B02D27F03FE41DA7F03FE51D241 :100240007F0332C10C32EA0B32B90932EC0CD641D1 :1002500047CD1B02D27F03FE3AC27F0378327E0D68 :10026000CD1B02D0FE20CA60022BE5CD7D04EBE160 :100270000E000608E579FE0FCAB4021ABEC2AC022F :10028000231305CA8C021AFE20C27C027EB7CA9BC9 :1002900002FE2CCA9B02FE20C2AC02D13A7F0DB7EF :1002A000C27F0379C630327F0DC357031310FDE1BF :1002B0000CC37202E1CD1B02FE44CAF802FE53CA0F :1002C0001C03FE51C27F0347CD1B02D27F03FE54A5 :1002D000C27F0378E60F477EFE532807FE442810AE :1002E00078180DCD1B02C27F03E60F07070707B082 :1002F00032800DC357033E5347CD1B02D27F03FE0E :1003000054CAD302FE44CA1503FE53C27F03783297 :10031000810DC357037832820DC357037EFE30DA56 :100320007F03FE3AD2F602CD1B02D630477EB7CA13 :100330005303FE2CCA5303FE20CA5303FE30DA7F58 :1003400003FE3AD27F03CD1B02D6304F78878780D9 :100350008781477832830DCD1B02D27A03FE2CCAE7 :100360006B03FE20CA57032BC36A02CD1B02D27A4D :1003700003FE20CA6B032BC36A02AF327D0DC93E58 :1003800001B7C9E5DDE13A7F0DB7CA9F03D6302139 :1003900001003C3D28032918FADD7400DD75013A9F :1003A000810DB7CAB503DDCB03B62FE6010F0FDD14 :1003B000B603DD77033A820DB7CACD03DDCB03A6C2 :1003C0002FE6010F0F0F0FDDB603DD77033A800D27 :1003D000B7CA1504DDCB03AEDDCB028EDDCB0286C2 :1003E000DDCB02AEE60FFE04280CFE032827DDCB92 :1003F00002C6DDCB02CEDDCB03EEDDCB02EE3A80D2 :100400000D07070707E60F280CDDCB0286FE042840 :1004100004DDCB03AE3A830DB7CA4904DDCB027EBF :1004200021630D110400CA2A04190600BEDA38043B :1004300023041DC22C04060378DDCB0296DDCB021B :100440009E0707DDB602DD7702CD7D04B7C2E80660 :10045000216E0DE53E04ED4B720DED5B740DF50A5A :10046000AEEBA6EBC2E806130323F13DC25E04E146 :100470000604ED5B720D7E12231310FAC9116E0D86 :100480002A030101650009CDCB06E5CDBF06D119D0 :10049000C93A780D0100000CD60ACAA404F29704E8 :1004A0000DC60A47213030097DFE30C2B0043E201F :1004B0006F22EE0B110F0C3A7D0DB7CAC10411F378 :1004C0000B0E09CD050011D60B0E09CD05002A72C1 :1004D0000DE5CB7EC2FE062323CB7E11FC09CAE4C8 :1004E00004110F0A0E09CD0500111F0A0E09CD05D2 :1004F00000CDC0060E09CD0500CD0307E1E523239D :1005000023CB66CA0C0511810AC30F0511640A0EBC :1005100009CD0500E1E5232323CB76CA2405114C40 :100520000AC3270511340A0E09CD0500E1E523238E :10053000CB462035CB4E201F23CB6EC251052BCB93 :100540006E23CA4B0511EA0AC36C05119E0AC36CDF :100550000511B70AC36C0523CB6EC2630511230BCB :10056000C36C05115D0BC36C0511D00A0E09CD05D6 :1005700000E1E523237EE60CCB7E2802CBE7215366 :100580000D0F5F1600195E2356EB22C40B11AF0B43 :100590000E09CD050011C40B3AC40BFE20C2A10503 :1005A000130E09CD0500119A0B0E09CD0500E15679 :1005B000235ED5CD7D04D1010800AFCB3ACB1B38EB :1005C000030918F706085EE5C50E02CD0500C1E176 :1005D0002310F3CD0307C93A7E0D2A0301116100F0 :1005E00019CDCB065F1600197E32780DFEFFC801CB :1005F00057002A0301094FCDBF06DADC06226B0D36 :10060000326D0D3E01E5CD4A06E1B73EFEC03E1E0D :10061000CD4A06EB2B7EFE243EFEC02A6B0D111048 :100620000019CDCB063A6D0D8787875F160019221A :10063000720DEB2104001922740D216E0DEB0104E3 :1006400000EDB0216E0D3A780DC9F5110C0019CDF1 :10065000CB0622790DAF327B0D327C0D3A7B0DB784 :10066000C29E0622790D06647E23FE24CA8206B746 :10067000CA8206FE20DA7A0610EE3EFF327B0DC3F8 :100680009E063A7C0D47F1F5B8CA9E060478327C86 :100690000D2B7E2322790DB7C27A06C35C06ED5B73 :1006A000790DF13A7B0DC93A7E0D3C1101003DCA2E :; ntpdate program for Kaypro CP/M 3 maclib z80 BDOS equ 0005h CMDLN equ 0080h ; BDOS functions CONOUT equ 2 PRINT equ 9 GETVER equ 12 SGSCB equ 49 ; CP/NET NDOS functions NSEND equ 66 NRECV equ 67 org 0100h jmp start ioport: db 038h vers: dw 0 scbadr: dw 0 gettime: db 0, 0, 2, 105, 0, 0 gottime: db 1, 2, 0, 105, 4, 0, 0, 0, 0, 0 ; just prediction of what will be received scbpb: db 03ah ; offset of SCB address (reserved area) db 0 ; get word, (SCB address) dw 0 ; assume < 100 decout: mvi b,'0' decot0: sui 10 jc decot1 inr b jmp decot0 decot1: adi 10 adi '0' push psw mov a,b call prout pop psw jmp prout ; Keeps number in HL - caller must preserve/init ; Returns CY for invalid hexnum: sui '0' rc cpi 9+1 jnc hexnm1 hexnm2: dad h dad h dad h dad h ora l mov l,a ret hexnm1: sui 'A'-'9' rc cpi 5+1 cmc rc adi 10 jmp hexnm2 hexout: push psw rrc rrc rrc rrc call hexdig pop psw hexdig: call tohex prout: mov e,a mvi c,CONOUT jmp BDOS tohex: ani 0fh adi 90h daa aci 40h daa ret ; HL = CP/M Date-time field, w/o seconds ; Print date and time to console. prdate: mov e,m inx h mov d,m inx h push h ; compute year mvi c,78 ; base year, epoch, binary mvi b,078h ; year, BCD ; special-case date=0... mov a,e ora d jnz prdat0 inx d prdat0: lxi h,365 mov a,c ani 03h ; Not strictly true, but works until year 2100... jnz prdat1 inx h prdat1: push h ora a dsbc d pop h jnc prdat2 ; done computing year... xchg ora a dsbc d xchg inr c mov a,b adi 1 daa mov b,a jmp prdat0 prdat2: ; DE = days within year 'C' push b ; save (2-digit) year, B = BCD, C = binary (until 2155) lxi h,month0+24 mov a,c ani 03h jnz prdat3 lxi h,month1+24 prdat3: ; compute month, DE = days in year,HL = mon-yr-days table adj for leap mvi b,12 prdat4: dcx h dcx h dcr b jm prdat5 ; should never happen... push h push d mov aG:<ާ2x# W:<­:22G?>Grx~:2Ô##~*$*">2̀2kº ʺ**iҺ@:O ~2~WW:2Ôyʛ?ʔx ʔ |̷ǧÔN:r:/GyOOA +¬ ¢y2:x¹o& :W>OͫE:ڟ?N/*"y2ͦ>2 ݦRXޥDM*w6 # x *ow**ws#r̀*i6#6 *}"j@*|<ď>!8>8> t>nͦv8 ~*ownT] KKͦޥ*w"wͦ"w@  :åN ɥ N#Fyإ*}|h#ð*ͫ# 6 *q @!"@**#":&2͒:È0:+Òy<_W`iͫDM*w ~bNpwޥDM*we ^#V#~2>â9͆>! "*y³*X*ÿ͂"*g* K!~<:wb##>w#wġ> r!~#22Zw*q>ww:c *#*is#r*:!:) :O! *c:Oͫ}@2æ ~á*g:o$* ~K6 ?~wKw**i{#zir+s{O:w:Ғ4~:w?r##rp# ä |g}oì*g  #G ¾1*q:*w***> r 2":O:G2!w* ~zWw+ !z?#~*! * * G! O~2~m͗O~t>2?:2g͝DM*0MD"!*MD$:Oë!N: «G>O: ¡ù* ġ :ڡn` ~#foͤ2O ̡"}:O*" !s#r#p*kN#F*m^#V#F*:O}|y9*+"*}|yP#9**DM"*ks#r*ms#r#pyox*kw#w*mw#w#w>2'å2*OͶyڲò<* Ͳ:0!::ò2*>*ͫ"4#4#4)7 #  w#*J|^#V#"i##"k##"m###"o#"q##"!s )*s!)*|!6~6 7 CP/NET Status ============= $Requester ID = $ Network Status Byte = $ Device status: $ Drive $ = Drive $ on Network Server ID = $ Console Device = $Console #$ List Device = $List #$ All LOCAL$ CP/NET has not been loaded.$! 9"10|(<"$(*#NM4(6OMM(22:Җo& )##*~ʏ:B!4`(:AO!:!i(~AO!:!s(#~OM!43" * ~:B!4((~as(#~OM$ * ~:B!4((~as(#~OM:((*Y PY    D E  ! !yayaH!Ɛ'@'O! :2c*DM 2*DM% 2> J kb~#q ~# ^#V! # U ! ">2! }  9ʌ^:—~x ):*:śś>*(+"(w++2+2+ɗpؗ! " >2+2*jx.#NzW::!2W!5=^x^z:m:*;#wO:͂^2¢ů͠Ě:!ڽ*(~ݘט5Wè՚ؗjטM2ͨxΚ*(+w"(j͖ !%"(^-:*$P:<\:W:2xM s:<9>2:*9x~+q’x2:**&~2+o#"&!+6Mř:W:2x ͺ*(+"(w  :ܙ>2*2:*(:+w"(ͺ:G::+̜2 5*(~o#"(Mš*(~`Uoj*(~#"(Ñ!*~6 s!+6 :+‚xoڊ{2Ó#w:2.+:.2-!%"(2*!"&!*~4:2-Ԃ:G ͳͨ^2+>2:2*N#G2 2GH)+6 :2,:!- ͖:,!͖+*( ~L#Bxz:*:*(~ʓOr ͖ ͖! O(Ì*(~2**}ʷ!#¶! ""÷:_:*(#wΗxH!)6 "&:! x5~y 5 6 y(^͖@O:=7:͖y ͖:I ͖:=e: zz#͖͂:! ͖ G:Ҏ>xʝʝw>ɯw̩z:»!>wɯ:=zxzz::G:=/ͽx:Āy!4 šn!6@G:x: P:<: P n6  t6 ! ^6 t6 u:)<͠^! Ó*"r*r"ÿ<:g:!͐*f}D! ~6 t!rͷ֕O(^ƕƕƕ  :Function = File = !,$"h ! 9"f! ͉:2t™:!=Hgo :O*;*͂:A2=/::0! dگ61#d ڸïp#:w#6 !6 :6 *#!)6.#)͂ O(BDOS > wM  2*7w#6?#7 .,:;[]=<>| !?]45#Ra{i_p# l s s l ls:¬MA~#*:^#V#z~G#N ^#V!>.s#r#-û!>~Hp>Aẅ́~͎>)w>O 2> w )#^#V#{(̈́p{n###> > w> _    dͥ ͥ͹yO ҧo@¹z 0w} DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells th,m inx h mov h,m mov l,a ; DE = days in year, HL = ytd[month] ora a dsbc d mov a,l ; potential remainder (neg) pop d pop h jnc prdat4 prdat5: ; B = month, 0-11; A = -dom neg push psw inr b mov a,b call decout mvi e,'/' mvi c,CONOUT call BDOS pop psw call decout mvi e,'/' mvi c,CONOUT call BDOS pop b mov a,b ; already BCD call hexout mvi e,' ' mvi c,CONOUT call BDOS pop h ; -> BCD hours mov a,m inx h push h call hexout mvi e,':' mvi c,CONOUT call BDOS pop h ; -> BCD minutes mov a,m inx h push h call hexout mvi e,':' mvi c,CONOUT call BDOS pop h ; -> BCD seconds mov a,m jmp hexout ; J F M A M J J A S O N D month0: dw 0, 31, 59, 90,120,151,181,212,243,273,304,334 month1: dw 0, 31, 60, 91,121,152,182,213,244,274,305,335 start: mvi c,GETVER call BDOS shld vers mov a,l cpi 30 jc badvers lxi h,CMDLN mov c,m inx h sid1: mov a,m cpi ' ' jnz sid0 inx h dcr c jnz sid1 jmp start1 ; no params, use defaults sid0: ; scan hex number as server ID xchg lxi h,0 sid2: ldax d inx d call hexnum jc sid3 dcr c jnz sid2 sid3: mov a,l sta gettime+1 start1: ; TODO: handle MP/M... lxi d,scbpb mvi c,SGSCB call BDOS shld scbadr lhld vers mvi a,2 ; bit for CP/Net ana h jz nocpnet lxi d,gettime mvi c,NSEND call BDOS ora a jnz error lxi d,gottime mvi c,NRECV call BDOS ora a jnz error jmp settime nocpnet: call netinit lxi b, gettime call sendmsg ora a jnz error lxi b, gottime call receivemsg ora a jnz error settime: lhld scbadr lxi d,058h ; date/time dad d xchg lxi h,gottime+5 lxi b,5 ; length of date/time di ldir ei lxi d,done mvi c,PRINT call BDOS lxi h,gottime+5 call prdate ret error: lxi d,errmsg mvi c,PRINT call BDOS ret badvers: lxi d,vermsg mvi c,PRINT call BDOS ret done: db 'Time was set to: $' errmsg: db 7,'Error retrieving network time.$' vermsg: db 7,'This program requires BDOS >= 3.0.$' ; These are only used if CP/Net is not running. netinit: lda ioport mov c,a inr c outp a inp a sta gettime+2 ret ; Send Message on Network sendmsg: ; BC = message addr mov h,b mov l,c ; HL = message address push h popix lda ioport mov c,a mvi b,5 ; length of header outir ldx b,4 ; msg siz field (-1) inr b ; might be 0, but that means 256 outir inr c ; status port inp a ; ani 02h ; cmd overrun rz mvi a,0ffh ret ; Receive Message from Network receivemsg: ; BC = message addr mov h,b mov l,c ; HL = message address push h popix lda ioport mov c,a inr c ; status port rcvwait: inp a ani 01h ; data ready jz rcvwait dcr c mvi b,5 ; header length inir ldx b,4 ; msg siz inr b inir inr c inp a ani 04h ; rsp overrun rz mvi a,0ffh ret end vers equ '0e' ; December 23, 1985 21:40 drm "KEYBD.ASM" ;******************************************************** ; KEYBOARD module for CP/M plus on the KAYPRO * ; Copyright (C) 1985 Douglas Miller * ;******************************************************** maclib Z80 false equ 0 true equ not false dbase equ 200 ;base for all char I/O devices dev0 equ 001 ;first device, rel. to base ndev equ 1 int equ false ;Keyboard input via interupts? bufsiz equ 16 ;use only 2,4,8,16,32,64,128,256. bufmsk equ bufsiz-1 sio1 equ 004h ;z80-sio/0 keyb equ sio1+1 ;CONSOLE keyboard ctrlA equ 1 ctrlB equ 2 ctrlD equ 4 ctrlE equ 5 ctrlF equ 6 ctrlG equ 7 lf equ 10 cr equ 13 ctrlN equ 14 ctrlO equ 15 ctrlP equ 16 ctrlQ equ 17 ctrlR equ 18 ctrlS equ 19 ctrlT equ 20 ctrlU equ 21 ctrlV equ 22 ctrlW equ 23 ctrlX equ 24 ctrlY equ 25 cls equ 26 extrn sio1vec cseg ;common memory, other parts in banked. dw thread db dbase+dev0,ndev jmp intkey jmp instkey jmp inputkey jmp outstkey jmp outputkey dw strkey dw tblkey dw modkey strkey: db 'KAYPRO ',0,'Keyboard handler ',0,'v3.10' dw vers db '$' modkey: db 00000000b,10000010b,00110100b,keyb ;primary conversion table for cursor and numberpad keys ; --0-- --1-- --2-- --3-- --4-- keycnv: db 0,ctrlP,ctrlU, 0, 0 ; B db ctrlV,ctrlW,ctrlY,ctrlQ, 0 ; C db ctrlR,ctrlO,ctrlF,ctrlB, 0 ; D db 0,ctrlA,ctrlN,ctrlG,ctrlT ; E db 0,ctrlE,ctrlX,ctrlS,ctrlD ; F ; ; * 0 . * * e = enter ; 1 2 3 e * u = up arrow ; 4 5 6 , * d = down ; * 7 8 9 - l = left ; * u d l r r = right ; if int index: lxi d,keybd mov a,e add m mov e,a push psw mov a,m inr a ani bufmsk mov m,a pop psw rnc inr d ret spclRx: sspd ustk lxi sp,istk push psw mvi a,00110000b ;error reset out keyb+2 pop psw lspd ustk ei reti interupt: sspd ustk lxi sp,istk push psw push b push d push h xra a out keyb+2 in keyb+2 bit 7,a jnz break rrc jnc exit lxi h,keypt0 lda keypt1 dcr a ani bufmsk cmp m push psw call index in keyb ani 01111111b stax d pop psw jnz exit gobl: mov a,m dcr a ani bufmsk mov m,a exit: pop h pop d pop b pop psw lspd ustk ei reti break: mvi a,00010000b ;reset ext/status (& break) out keyb+2 in keyb xra a sta keybd sta keypt1 inr a sta keypt0 jmp exit ustk: dw 0 dw 0,0,0,0,0,0,0,0 istk: ds 0 keypt0: db 0 keypt1: db 0 keybd: ds bufsiz endif thread equ $ dseg ;banked memory. tblkey: ;initial values only, copied by BIOS to its table. if int db 'IKEYBD',00001011b,6 ;I/O, hard-baud, no protocal, 300 else ;serial db 'KEYBD ',00001011b,6 ;I/O, hard-baud, no protocal, 300 endif ;serial intkey: if int call is1 lxi h,interupt shld sio1vec+4 lxi h,spclRx shld sio1vec+6 xra a sta keypt0 sta keypt1 mvi a,1 out keyb+2 mvi a,00011100b ;int on receive character, sts eff vect. out keyb+2 ret endif is1: lxi h,modkey+2 bit 7,m rnz mov a,m ani 00110000b ; --bb---- bits per char rlc ; -bb----- mov e,a ; Tx image setb 3,e ; Tx Enable rlc ; bb------ ori 00000001b ; Rx Enable mov d,a ; Rx image mov a,m ani 00001111b ori 01000000b ; 16x clock mov b,a ; WR4 image dcx h mov a,m ; ani 10000010b ; DTR, RTS ora e mov e,a ; Tx control, with RTS/DTR inx h inx h mov c,m inr c inr c mvi a,4 outp a outp b ; WR4 inr a outp a outp e ; WR5 mvi a,3 outp a outp d ; WR3 ret inputkey: inp1: call instkey jz inp1 if int lxi h,keypt1 call index ldax d else in keyb ; get data endif ora a rp sui 0B0H lxi h,keycnv ; first loc. is not used mov m,a xra a rrd mov c,m add c add c add c add c add c mov c,a mvi b,0 dad b mov a,m ret instkey: if int lxi h,keypt0 lda keypt1 sub m else xra a out keyb+2 in keyb+2 ; read from status port ani 1 ; isolate RxRdy endif rz ; return with zero ori true ret outputkey: outp0: call outstkey jrz outp0 ; wait for TxEmpty, HL->port mov a,c out keyb ; send data ret outstkey: mvi a,00010000b ;reset ext/status change out keyb+2 in keyb+2 ani 00000100b ; test xmit holding register empty rz ; ori true ret ; return true if ready end  6530 = VERS EQU '0e' ; MARCH 18, 2017 19:52 DRM "LDCPM3.ASM" MACLIB Z80 0000 = CPM EQU 0 0005 = BDOS EQU 5 0080 = TBUFF EQU 80H 0009 = MSGOUT EQU 9 000D = RESET EQU 13 000F = OPENF EQU 15 0014 = READ EQU 20 001A = SDMA EQU 26 000A = LF EQU 10 000D = CR EQU 13 0100 ORG 100H LOADER: 0100 31DF03 LXI SP,STACK ; ROM 81-292 USES 0FD74H ; U-ROM 81-478 USES 0FE9AH ; ROM 81-302 USES 0FD5CH ; ROM 81-326 USES 0F800H ; IDENTIFY ROM BY... ; WE CAN'T MAP ROM IN, WE ARE IN LOW MEMORY. ; CAN'T CALL ROM, EITHER. ; U-ROM PLACES '2.01' IN 0FFF8H... ; 81-292 PLACES COPYOUT IN 0FDE5H (DB 14 CB BF D3 14 ED B0 DB 14 CB FF D3 14 C9) ; 81-302 PLACES COPYOUT IN 0F919H (DB 14 CB BF D3 14 ED B0 DB 14 CB FF D3 14 C9) ; 81-326 PLACES COPYOUT IN 0F822H (DB 14 CB BF D3 14 ED B0 DB 14 CB FF D3 14 C9) 0103 CD0F02 CALL CHKUNI 0106 CA3402 JZ ROM20 0109 2122F8 LXI H,0F822H 010C CD2602 CALL CHKSIG 010F CA7002 JZ ROM17 0112 2119F9 LXI H,0F919H 0115 CD2602 CALL CHKSIG 0118 CA8002 JZ ROM19 011B 21E5FD LXI H,0FDE5H 011E CD2602 CALL CHKSIG 0121 CAA102 JZ ROMXX 0124 110E03 LXI D,BADROM 0127 0E09 MVI C,MSGOUT 0129 CD0500 CALL BDOS 012C C30000 JMP CPM GOTROM: 012F 112603 LXI D,ROMMSG 0132 0E09 MVI C,MSGOUT 0134 CD0500 CALL BDOS 0137 0E0D MVI C,RESET 0139 CD0500 CALL BDOS 013C 0E0F MVI C,OPENF 013E 11D102 LXI D,CPM3$SYS 0141 CD0500 CALL BDOS 0144 FEFF CPI 255 0146 115903 LXI D,NOFILE 0149 CA0702 JZ ERRMSG 014C 118000 LXI D,TBUFF 014F CDF401 CALL DMASET 0152 CDFA01 CALL READFILE 0155 218000 LXI H,TBUFF 0158 11F502 LXI D,TOPRES 015B 010600 LXI B,6 LDIR 015E+EDB0 DB 0EDH,0B0H 0160 CDFA01 CALL READFILE 0163 0E09 MVI C,MSGOUT 0165 118000 LXI D,TBUFF 0168 CD0500 CALL BDOS 016B 3AF602 LDA RESLEN 016E 57 MOV D,A ; LDA TOPRES 016F 1E00 MVI E,0 0171 21DF03 LXI H,BUFFER 0174 19 DAD D 0175 22FB02 SHLD RESEND 0178 EB XCHG 0179 CDDC01 CALL LOADF 017C 3AF802 LDA BNKLEN 017F B7 ORA A 0180 CA9101 JZ NOBNK 0183 57 MOV D,A ; LDA TOPBNK 0184 1E00 MVI E,0 0186 2AFB02 LHLD RESEND 0189 19 DAD D 018A 22FD02 SHLD BNKEND 018D EB XCHG 018E CDDC01 CALL LOADF NOBNK: 0191 F3 DI ; ***** THe system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page relocatable file for execution under MP/M in relocatable segment OR Output .RSP resident system process file for execution under MP/M OS Output .SPR system page relocatable file for execution under MP/M Phhhh Program origin; changes default program origin address to hhhh. Default is 0100H. Q Lists symbols with leading question mark S Search preceding file as a library $Cd Destination of console messages d can be X (console), Y (printer), or Z (zero output). Default is X. $Id Source of intermediate files; d is disk drive A-P. Default is current drive. $Ld Source of library files; d is disk drive A-P. Default is current drive. $Od Destination of of object file; d can be Z or disk drive A-P. Default is to same drive as first file in the LINK-80 command. $Sd Destination of symbol file; d can be Y or Z or disk drive A-P. Default is to same drive as first file in LINK-80 command. ///2Examples A>LINK b:MYFILE[NR] LINK-80 on drive A uses as input MYFILE.REL on drive B and produces the executable machine code file MYFILE.COM on drive B. The [NR] option specifies no symbol table file. A>LINK m1,m2,m3 LINK-80 combines the separately compiled files m1, m2, and m3, resolves their external references, and produces the executable machine code file m1.COM. A>LINK m=m1,m2,m3 LINK-80 combines the separately compiled files m1, m2, and m3 and produces the executable machine code file m.COM. A>LINK MYFILE,FILE5[s] The [s] option tells LINK-80 to search FILE5 as a library. LINK-80 combines MYFILE.REL with the referenced subroutines contained in FILE5.REL on the default drive A and produces MYFILE.COM on drive A. ///1mac Syntax: MAC filename {$options} Explanation: MAC, the CP/M 3 macro assembler, reads assembly language statements from a file of type .ASM, assembles the statements, and produces three output files with the input filename and filetypes of .HEX, .PRN, and .SYM. Filename.HEX contains INTEL hexadecimal format object code. Filename.PRN contains an annotated source listing that you can print or examine at the console. Filename.SYM contains a sorted list of symbols defined in the program. ///2Examples A>MAC SAMPLE A>MAC SAMPLE $PB AA HB SX ///2options Use options to direct the input and output of MAC. Use a letter with the option to indicate the source and destination drives, and console, printer, or zero output. Valid drive names are A thru O. X, P and Z specify console, printer, and zero output, respectively. Assembly Options That Direct Input/Output A source drive for .ASM file (A-O) H destination drive for .HEX file (A-O, Z) L source drive for macrolibrary .LIB files called by the MACLIB statement. P destination drive for .PRN file (A-O, X, P, Z) S destination drive for .SYM file Assembly Options That Modify Contents Of Output File +L lists input lines read from macrollibrary .LIB files -L suppresses listing (default) +M lists all macro lines as they are processed during assembly -M suppresses all macro lines as they are read during assembly *M lists only hex generated by macro expansions +Q lists all LOCAL symbols in the symbol list -Q suppresses all LOCAL symbols in the symbol list (default) +S appends symbol file to print file -S suppresses creation of symbol file +1 produces a pass 1 listing for macro debugging in .PRN file -1 suppress listing on pass 1 (default) ///1PATCH Syntax: PATCH filename{.typ} {n} Explanation: The PATCH command displays or installs patch number n to the CP/M 3 system or command files. The patch number n must be between 1 and 32 inclusive. Example: A>PATCH SHOW 2 Patches the SHOW.COM system file with patch number 2. ///1PIP (copy) Syntax: DESTINATION SOURCE PIP d:{Gn} | filespec{[Gn]} = filespec{[o]},... | d:{[o]} Explanation: The file copy program PIP copies files, combines files, and transfers files between disks, printers, consoles, or other devices attached to your computer. The first filespec is the destination. The second filespec is the source. Use two or more source filespecs separated by commas to combine two or more files into one file. [o] is any combination of the available options. The [Gn] option in the destination filespec tells PIP to copy your file to that user number. PIP with no command tail displays an * prompt and awaits your series of commands, entered and processed one line at a time. The source or destination can be any CP/M 3 logical device. ///2Examples COPY A FILE FROM ONE DISK TO ANOTHER A>PIP b:=a:draft.txt A>PIP b:draft.txt = a: B3>PIP myfile.dat=A:[G9] A9>PIP B:[G3]=myfile.dat COPY A FILE AND RENAME IT A5>PIP newdraft.txt=oldraft.txt C8>PIP b:newdraft.txt=a:oldraft.txt COPY MULTIPLE FILES A>PIP b:=draft.* A>PIP b:=*.* B>PIP b:=c:.*.* C>PIP b:=*.txt[g5] C>PIP a:=*.com[wr] B>PIP a:[g3]=c:*.* COMBINE MULTIPLE FILES A>PIP b:new.dat=file1.dat,file2.dat COPY, RENAME AND PLACE IN USER 1 A>pip newdraft.txt[g1]=oldraft.txt COPY, RENAME AND GET FROM USER 1 A>PIP newdraft.txt=oldraft.txt[g1] COPY TO/FROM LOGICAL DEVICES A>PIP b:funfile.sue=con: A>PIP lst:=con: A>PIP lst:=b:draft.txt[t8] A>PIP prn:=b:draft.txt ///2options PIP OPTIONS A Archive. Copy only files that have been changed since the last copy. C Confirm. PIP prompts for confirmation before each file copy. Dn Delete any characters past column n. E Echo transfer to console. F Filter form-feeds from source data. Gn Get from or go to user n. H Test for valid Hex format. I Ignore :00 Hex data records and test for valid Hex format. K Kill display of filespecs on console. L Translate upper case to lower case. N Number output lines O Object file transfer, ^Z ignored. Pn Set page length to n. (default n=60) Qs^Z Quit copying from source at string s. R Read files that have been set to SYStem. Ss^Z Start copying from the source at the string s. Tn Expand tabs to n spaces. U Translate lower case to upper case. V Verify that data has been written correctly. W Write over Read Only files without console query. Z Zero the parity bit. All options except C,G,K,O,R,V and W force an ASCII file transfer, character by character, terminated by a ^Z. ///1PUT Syntax: PUT CONSOLE {OUTPUT TO} FILE filespec {option} | CONSOLE PUT PRINTER {OUTPUT TO} FILE filespec {option} | PRINTER PUT CONSOLE {OUTPUT TO} CONSOLE PUT PRINTER {OUTPUT TO} PRINTER Explanation: PUT puts console or printer output to a file for the next command entered at the console, until the program terminates. Then console output reverts to the console. Printer output is directed to a file until the program terminates. Then printer output is put back to the printer. PUT with the SYSTEM option directs all subsequent console/printer output to the specified file. This option terminates when you enter the PUT CONSOLE or PUT PRINTER command. ///2Options [ {ECHO | NO ECHO} {FILTER | NO FILTER} | {SYSTEM} ] ECHO specifies that output is echoed to the console. This is the default option when you direct console output to a file. NO ECHO specifies that file output is not echoed to the console. NO ECHO is the default for the PUT PRINTER command. FILTER specifies filtering of control characters, which means that control characters are translated to printable characters. For example, an ESCape character is translated to ^[. NO FILTER means that PUT does not translate control characters. This is the default option. SYSTEM specifies that system output as well as program output is written to the file specified by filespec. Output is written to the file until a subsequent PUT CONSOLE command redirects console output back to the console. ///2Examples A>PUT CONSOLE OUTPUT TO FILE XOUT [ECHO] Directs console output to file XOUT with the output echoed to the console. A>PUT PRINTER OUTPUT TO FILE XOUT A>MYPROG Directs IS SHOULD BE PART OF COLD BOOT IN CPM3LDRK 0192 2A4A03 LHLD ROMCRT 0195 114000 LXI D,00040H 0198 011000 LXI B,16 LDIR 019B+EDB0 DB 0EDH,0B0H 019D 3A4603 LDA ROMID 01A0 12 STAX D ; 0050H: ROM IDENTIFER CHAR 01A1 13 INX D 01A2 3A4E03 LDA FPYTYP 01A5 12 STAX D ; 0051H: FLOPPY DRIVE TYPE (ALL SAME) 01A6 13 INX D 01A7 3A4F03 LDA FPYSEL 01AA 12 STAX D ; 0052H: FLOPPY DRIVE SELECT MASK ; ***** 01AB 3AF602 LDA RESLEN 01AE 47 MOV B,A ;B=RESLEN 01AF 0E00 MVI C,0 01B1 2AFB02 LHLD RESEND 01B4 2B DCX H 01B5 3AF502 LDA TOPRES 01B8 57 MOV D,A 01B9 1E00 MVI E,0 01BB 1B DCX D LDDR 01BC+EDB8 DB 0EDH,0B8H 01BE 3AF802 LDA BNKLEN 01C1 B7 ORA A 01C2 CAD501 JZ NOBNK0 01C5 47 MOV B,A 01C6 0E00 MVI C,0 01C8 2AFD02 LHLD BNKEND 01CB 2B ; SNIOS for fictitious CPNetDevice ; maclib z80 public NTWKIN, NTWKST, CNFTBL, SNDMSG, RCVMSG, NTWKER, NTWKBT, CFGTBL cseg ; Slave Configuration Table CFGTBL: ds 1 ; network status byte ds 1 ; slave processor ID number ds 2 ; A: Disk device +2 ds 2 ; B: " ds 2 ; C: " ds 2 ; D: " ds 2 ; E: " ds 2 ; F: " ds 2 ; G: " ds 2 ; H: " ds 2 ; I: " ds 2 ; J: " ds 2 ; K: " ds 2 ; L: " ds 2 ; M: " ds 2 ; N: " ds 2 ; O: " ds 2 ; P: " ds 2 ; console device +34 ds 2 ; list device: +36... ds 1 ; buffer index +2 db 0 ; FMT +3 db 0 ; DID +4 db 0ffh ; SID (CP/NOS must still initialize) db 5 ; FNC +6 db 0 ; SIZ +7 ds 1 ; MSG(0) List number +8 ds 128 ; MSG(1) ... MSG(128) +9... ioport: db 038h ; possibly configured here... ; Network Status Byte Equates ; active equ 0001$0000b ; slave logged in on network rcverr equ 0000$0010b ; error in received message senderr equ 0000$0001b ; unable to send message ; Utility Procedures ; ; Network Initialization NTWKIN: lxix CFGTBL mvi a,active stx a,+0 ; network status byte lda ioport mov c,a inr c ; status port xra a outp a dcr c inp a stx a,+1 ; our slave (client) ID xra a sta CFGTBL+36+7 ret ; Network Status NTWKST: lda CFGTBL+0 mov b,a ani not (rcverr+senderr) sta CFGTBL+0 mov a,b ret ; Return Configuration Table Address ; Still need this for BDOS func 69 CNFTBL: lxi h,CFGTBL ret ; Send Message on Network SNDMSG: ; BC = message addr mov h,b mov l,c ; HL = message address push h popix lda CFGTBL+1 stx a,+2 ; Set Slave ID in header lda ioport mov c,a mvi b,5 ; length of header outir ldx b,+4 ; msg siz field (-1) inr b ; might be 0, but that means 256 outir inr c ; status port inp a ; ani 02h ; cmd overrun rz mvi a,0ffh ret ; Receive Message from Network RCVMSG: ; BC = message addr mov h,b mov l,c ; HL = message address push h popix lda ioport mov c,a inr c ; status port rcvwait: inp a ani 01h ; data ready jz rcvwait dcr c ; data port mvi b,5 ; header length inir ; Could compare SLVID with "LDX r,1" and ignore messages. ; But this "hardware" is point-to-point (connection oriented) ; so the only messages we see are intended for us. ldx b,+4 ; msg siz inr b inir inr c ; status port inp a ani 04h ; rsp overrun rz mvi a,0ffh NTWKER: ret NTWKBT: ; NETWORK WARM START lda ioport mov c,a xra a ; Future hardware might expect data outp a inp a ; this is our Slave ID, but we already have it ret end ; Thread terminator for CP/M 3 I/O modules. cseg ;common memory dw 0 ;terminate thread end ; A version of CPNETSTS that minimizes output org 00100h jmp start l0103h: db 13,10,'CP/NET Status' db 13,10,'=============' db 13,10,'$' l012ch: db 'Requester ID = $' l013ch: db 13,10,'Network Status Byte = $' l0155h: db 13,10,'Device status:' db 13,10,'$' l016dh: db ' Drive $' l0176h: db ' = Drive $' l0180h: db ' on Network Server ID = $' l01a2h: db ' Console Device = $' l01b4h: db 'Console #$' l01ddh: db ' List Device = $' l01ech: db 'List #$' l01hhh: db ' All LOCAL$' l0212h: db 13,10,'CP/NET has not been loaded.$' start: lxi h,0 dad sp shld usrstk lxi sp,stack call getver mov a,h ani 02h jz nocpnt lxi b,l0103h ; Intro call msgout call getcfg shld nettbl lxi b,l012ch ; Req ID (client ID) call msgout lhld nettbl inx h mov c,m call hexout lxi b,l013ch ; Net Sts Byte call msgout call getsts mov c,a call hexout lxi b,l0155h ; Disk device status: call msgout xra a sta count sta curdrv drvlup: lda curdrv cpi 16 jnc trycon ; Done with drives A-P... mov l,a mvi h,0 dad h ; *2 - 2 bytes per drive inx h inx h ; +2 - 2 bytes before drives xchg lhld nettbl dad d mov a,m ani 080h jz locdrv ; drive is local... push h lda count ora a cnz crlf lxi h,count inr m lxi b,l016dh ; Drive... call msgout lda curdrv adi 'A' mov c,a call chrout mvi c,':' call chrout lxi b,l0176h ; = Drive... i.e. REMOTE call msgout pop h push h mov a,m ani 00fh ; remote drive number adi 'A' mov c,a call chrout mvi c,':' call chrout lxi b,l0180h ; on server... call msgout pop h inx h mov a,m ; server ID mov c,a call hexout locdrv: ; Drive is LOCAL... lxi h,curdrv inr m jmp drvlup trycon: lxi b,00022h lhld nettbl dad b mov a,m ani 080h jz trylst push h lda count ora a cnz crlf lxi h,count inr m lxi b,l01a2h ; Console Device = ... call msgout lxi b,l01b4h ; Console # call msgout pop h push h mov a,m call hexdig lxi b,l0180h ; on Network Server ID = call msgout pop h inx h mov a,m mov c,a call hexout trylst: lxi b,00024h lhld nettbl dad b mov a,m ani 080h jz done push h lda count ora a cnz crlf lxi h,count inr m lxi b,l01ddh ; List Device = call msgout lxi b,l01ech ; List # call msgout pop h push h mov a,m call hexdig lxi b,l0180h ; on Network Server ID = call msgout pop h inx h mov a,m mov c,a call hexout done: lda count ora a jnz exit lxi b,l01hhh call msgout jmp exit nocpnt: lxi b,l0212h ; CP/NET has not been loaded call msgout exit: lhld usrstk sphl ret chrout: mov e,c mvi c,002h call 00005h ret msgout: mov d,b mov e,c mvi c,009h call 00005h ret getver: mvi c,12 call 00005h ret getsts: mvi c,044h call 00005h ret getcfg: mvi c,045h call 00005h ret crlf: mvi c,13 call chrout mvi c,10 call chrout ret hexout: push b mov a,c rrc rrc rrc rrc call hexdig pop b mov a,c call hexdig mvi c,'H' call chrout ret hexdig: ani 0fh adi 90h daa aci 40h daa mov c,a jmp chrout ds 40 stack: ds 0 usrstk: dw 0 count: db 0 curdrv: db 0 nettbl: dw 0 end @CHK MACRO ?DD ;; USED FOR CHECKING RANGE OF 8-BIT DISP.S IF (?DD GT 7FH) AND (?DD LT 0FF80H) 'DISPLACEMENT RANGE ERROR - Z80 LIB' ENDIF ENDM @CHKR MACRO ?NN,?DD @CHK ?DD DB ?NN,?DD ENDM LDX MACRO ?R,?D @CHK ?D DB 0DDH,?R*8+46H,?D ENDM LDY MACRO ?R,?D @CHK ?D DB 0FDH,?R*8+46H,?D ENDM STX MACRO ?R,?D @CHK ?D DB 0DDH,70H+?R,?D ENDM STY MACRO ?R,?D @CHK ?D DB 0FDH,70H+?R,?D ENDM MVIX MACRO ?N,?D @CHK ?D DB 0DDH,36H,?D,?N ENDM MVIY MACRO ?N,?D @CHK ?D DB 0FDH,36H,?D,?N ENDM LDAI MACRO DB 0EDH,57H ENDM LDAR MACRO DB 0EDH,5FH ENDM STAI MACRO DB 0EDH,47H ENDM STAR MACRO DB 0EDH,4FH ENDM LXIX MACRO ?NNNN DB 0DDH,21H DW ?NNNN ENDM LXIY MACRO ?NNNN DB 0FDH,21H DW ?NNNN ENDM LDED MACRO ?NNNN DB 0EDH,5BH DW ?NNNN ENDM LBCD MACRO ?NNNN DB 0EDH,4BH DW ?NNNN ENDM LSPD MACRO ?NNNN DB 0EDH,07BH DW ?NNNN ENDM LIXD MACRO ?NNNN DB 0DDH,2AH DW ?NNNN ENDM LIYD MACRO ?NNNN DB 0FDH,2AH DW ?NNNN ENDM SBCD MACRO ?NNNN DB 0EDH,43H DW ?NNNN ENDM SDED MACRO ?NNNN DB 0EDH,53H DW ?NNNN ENDM SSPD MACRO ?NNNN DB 0EDH,73H DW ?NNNN ENDM SIXD MACRO ?NNNN DB 0DDH,22H DW ?NNNN ENDM SIYD MACRO ?NNNN DB 0FDH,22H DW ?NNNN ENDM SPIX MACRO DB 0DDH,0F9H ENDM SPIY MACRO DB 0FDH,0F9H ENDM PUSHIX MACRO DB 0DDH,0E5H ENDM PUSHIY MACRO DB 0FDH,0E5H ENDM POPIX MACRO DB 0DDH,0E1H ENDM POPIY MACRO DB 0FDH,0E1H ENDM EXAF MACRO DB 08H ENDM EXX MACRO DB 0D9H ENDM XTIX MACRO DB 0DDH,0E3H ENDM XTIY MACRO DB 0FDH,0E3H ENDM LDI MACRO DB 0EDH,0A0H ENDM LDIR MACRO DB 0EDH,0B0H ENDM LDD MACRO DB 0EDH,0A8H ENDM LDDR MACRO DB 0EDH,0B8H ENDM CCI MACRO DB 0EDH,0A1H ENDM CCIR MACRO DB 0EDH,0B1H ENDM CCD MACRO DB 0EDH,0A9H ENDM CCDR MACRO DB 0EDH,0B9H ENDM ADDX MACRO ?D @CHK ?D DB 0DDH,86H,?D ENDM ADDY MACRO ?D @CHK ?D DB 0FDH,86H,?D ENDM ADCX MACRO ?D @CHK ?D DB 0DDH,8EH,?D ENDM ADCY MACRO ?D @CHK ?D DB 0FDH,8EH,?D ENDM SUBX MACRO ?D @CHK ?D DB 0DDH,96H,?D ENDM SUBY MACRO ?D @CHK ?D DB 0FDH,96H,?D ENDM SBBX MACRO ?D @CHK ?D DB 0DDH,9EH,?D ENDM SBBY MACRO ?D @CHK ?D DB 0FDH,9EH,?D ENDM ANAX MACRO ?D @CHK ?D DB 0DDH,0A6H,?D ENDM ANAY MACRO ?D @CHK ?D DB 0FDH,0A6H,?D ENDM XRAX MACRO ?D @CHK ?D DB 0DDH,0AEH,?D ENDM XRAY MACRO ?D @CHK ?D DB 0FDH,0AEH,?D ENDM ORAX MACRO ?D @CHK ?D DB 0DDH,0B6H,?D ENDM ORAY MACRO ?D @CHK ?D DB 0FDH,0B6H,?D ENDM CMPX MACRO ?D @CHK ?D DB 0DDH,0BEH,?D ENDM CMPY MACRO ?D @CHK ?D DB 0FDH,0BEH,?D ENDM INRX MACRO ?D @CHK ?D DB 0DDH,34H,?D ENDM INRY MACRO ?D @CHK ?D DB 0FDH,34H,?D ENDM DCRX MACRO ?D @CHK ?D DB 0DDH,035H,?D ENDM DCRY MACRO ?D @CHK ?D DB 0FDH,35H,?D ENDM NEG MACRO DB 0EDH,44H ENDM IM0 MACRO DB 0EDH,46H ENDM IM1 MACRO DB 0EDH,56H ENDM IM2 MACRO DB 0EDH,5EH ENDM BC EQU 0 DE EQU 2 HL EQU 4 IX EQU 4 IY EQU 4 DADC MACRO ?R DB 0EDH,?R*8+4AH ENDM DSBC MACRO ?R DB 0EDH,?R*8+42H ENDM DADX MACRO ?R DB 0DDH,?R*8+09H ENDM DADY MACRO ?R DB 0FDH,?R*8+09H ENDM INXIX MACRO DB 0DDH,23H ENDM INXIY MACRO DB 0FDH,23H ENDM DCXIX MACRO DB 0DDH,2BH ENDM DCXIY MACRO DB 0FDH,2BH ENDM BIT MACRO ?N,?R DB 0CBH,?N*8+?R+40H ENDM SETB MACRO ?N,?R DB 0CBH,?N*8+?R+0C0H ENDM RES MACRO ?N,?R DB 0CBH,?N*8+?R+80H ENDM BITX MACRO ?N,?D @CHK ?D DB 0DDH,0CBH,?D,?N*8+46H ENDM BITY MACRO ?N,?D @CHK ?D DB 0FDH,0CBH,?D,?N*8+46H ENDM SETX MACRO ?N,?D @CHK ?D DB 0DDH,0CBH,?D,?N*8+0C6H ENDM SETY MACRO ?N,?D @CHK ?D DB 0FDH,0CBH,?D,?N*8+0C6H ENDM RESX MACRO ?N,?D @CHK ?D DB 0DDH,0CBH,?D,?N*8+86H ENDM RESY MACRO ?N,?D @CHK ?D DB 0FDH,0CBH,?D,?N*8+86H ENDM JR MACRO ?N @CHKR 18H,?N-$-1 ENDM JRC MACRO ?N @CHKR 38H,?N-$-1 ENDM JRNC MACRO ?N @CHKR 30H,?N-$-1 ENDM JRZ MACR the printer output of program MYPROG to file XOUT. The output is not echoed to the printer. A>PUT PRINTER OUTPUT TO FILE XOUT2 [ECHO,SYSTEM] Directs all printer output to file XOUT2 as well as to the printer (with ECHO option), and the PUT is in effect until you enter a PUT PRINTER OUTPUT TO PRINTER command. A>PUT CONSOLE OUTPUT TO CONSOLE Directs console output back to the console. A>PUT PRINTER OUTPUT TO PRINTER Directs printer output back to the printer. ///1RENAME Syntax: RENAME {new-filespec=old-filespec} Explanation: RENAME lets you change the name of a file in the directory of a disk. To change several filenames in one command use the * or ? wildcards in the file specifications. The RENAME command can be abbreviated REN. REN prompts you for input. ///2Examples A>RENAME NEWFILE.BAS=OLDFILE.BAS The file OLDFILE.BAS changes to NEWFILE.BAS on drive A. A>RENAME The system prompts for the filespecs: Enter New Name:X.PRN Enter Old Name:Y.PRN Y .PRN=X .PRN A> File X.PRN is renamed to Y.PRN on drive A. B>REN A:PRINTS.NEW = PRINCE.NEW The file PRINCE.NEW on drive A changes to PRINTS.NEW on drive A. A>RENAME S*.TEX=A*.TEX The above command renames all the files matching A*.TEX to files with filenames S*.TEX. A>REN B:NEWLIST=B:OLDLIST The file OLDLIST changes to NEWLIST on drive B. Since the second drive specifier, B: is implied by the first one, it is unnecessary in this example. The command line above has the same effect as the following: A>REN B:NEWLIST=OLDLIST or A>REN NEWLIST=B:OLDLIST ///1RMAC Syntax: RMAC filespec {$Rd | $Sd | $Pd} Explanation: RMAC, a relocatable macro assembler, assembles .ASM files of into .REL files that you can link to create .COM files. ///2options RMAC options specify the destination of the output files. Replace d with the destination drive letter for the output files. Option d=output option R- drive for REL file (A-O, Z) S- drive for SYM file (A-O, X, P, Z) P- drive for PRN file (A-O, X, P, Z) A-O specifies drive A-O. X means output to the console. P means output to the printer. Z means zero output. ///2Example A>RMAC TEST $PX SB RB Assembles the file TEST.ASM from drive A, sends the listing file (TEST.PRN) to the console, puts the symbol file (TEST.SYM) on drive B and puts the relocatable object file (TEST.REL) on drive B. ///1SAVE Syntax: SAVE Explanation: SAVE copies the contents of memory to a file. To use SAVE, first issue the SAVE command, then run your program which reads a file into memory. Your program exits to the SAVE utility which prompts you for a filespec to which it copies the contents of memory, and the beginning and ending address of the memory to be SAVEd. ///2Example A>SAVE Activates the SAVE utility. Now enter the name of the program which loads a file into memory. A>SID dump.com Next, execute the program. #g0 When the program exits, SAVE intercepts the return to the system and prompts the user for the filespec and the bounds of memory to be SAVEd. SAVE Ver 3.0 Enter file (type RETURN to exit):dump2.com If file DUMP2.COM exists already, the system asks: Delete dump2.com? Y Then the system asks for the bounds of memory to be saved: Beginning hex address: 100 Ending hex address: 400 The contents of memory from 100H (Hexadecimal) to 400H is copied to file DUMP2.COM. ///1SET Syntax: SET [options] SET d: [options] SET filespec [options] Explanation: SET initiates password protection and time stamping of files. It also sets the file and drive attributes Read-Write, Read-Only, DIR and SYS. It lets you label a disk and password protect the label. To enable time stamping of files, you must first run INITDIR to format the disk directory. ///2Label Syntax: SET {d:} [NAME=labelname.typ] SET [PASSWORD=password] SET [PASSWORD= ///3Examples A>SET [NAME=DISK100] Labels the disk on the default drive as DISK100. A>SET [PASSWORD=SECRET] Assigns SECRET to the disk label. A>SET [PASSWORD= Nullifies the existing password. ///2Passwords SET [PROTECT=ON] SET [PROTECT=OFF] SET filespec [PASSWORD=password] SET filespec [PROTECT=READ] SET filespec [PROTECT=WRITE] SET filespec [PROTECT=DELETE] SET filespec [PROTECT=NONE] SET filespec [attribute-options] ///3Modes Password Protection Modes Mode Protection READ The password is required for reading, copying writing, deleting or renaming the file. WRITE The password is required for writing, deleting or renaming the file. You do not need a password to read the file. DELETE The password is only required for deleting or renaming the file. You do not need a password to read or modify the file. NONE No password exists for the file. If a password password exists, this modifier can be used to delete the password. ///2Attributes RO sets the file attribute to Read-Only. RW sets the file attribute to Read-Write. SYS sets the file attribute to SYS. DIR sets the file attribute to DIR. ARCHIVE=OFF means that the file has not been backed up (archived). ARCHIVE=ON means that the file has been backed up (archived). The Archive attribute can be turned on by SET or by PIP when copying a group of files with the PIP [A] option. SHOW and DIR display the Archive option. F1=ON|OFF turns on or off the user-definable file attribute F1. F2=ON|OFF turns on or off the user-definable file attribute F2. F3=ON|OFF turns on or off the user-definable file attribute F3. F4=ON|OFF turns on or off the user-definable file attribute F4. ///3Examples SET [PROTECT=ON] Turns on password protection for all the files on the disk. You must turn on password protection before you can assign passwords to files. SET [PROTECT=OFF] Disables password protection for the files on your disk. A>SET MYFILE.TEX [PASSWORD=MYFIL] MYFIL is the password assigned to file MYFILE.TEX. B>SET *.TEX [PASSWORD=SECRET, PROTECT=WRITE] Assigns the password SECRET to all the TEX files on drive B. Each TEX file is given a WRITE protect mode to prevent unauthorized editing. A>SET MYFILE.TEX [RO SYS] Sets MYFILE.TEX to Read-Only and SYStem. ///2Default A>SET [DEFAULT=dd] Instructs the system to use dd as a password if you do not enter a password for a password-protected file. ///2Time-Stamps Syntax: SET [CREATE=ON] SET [ACCESS=ON] SET [UPDATE=ON] Explanation: The above SET commands allow you to keep a record of the time and date of file creation and update, or of the last access and update of your files. ///3Options [CREATE=ON] turns on CREATE time stamps on the disk in the default or specified drive. To record the creation time of a file, the CREATE option must be turned on before the file is created. [ACCESS=ON] turns on ACCESS time stamps on the disk in the default or specified drive. ACCESS and CREATE options are mutually exclusive; only one can be in effect at a time. If you turn on the ACCESS time stamp on a disk that previously had CREATE time stamp, the CREATE time stamp is automatically turned off. [UPDATE=ON] turns on UPDATE time stamps on the disk in the default or specified drive. UPDATE time stamps record the time the file was last modified. ///3Examples A>SET [ACCESS=ON] A>SET [CREATE=ON,UPDATE=ON] ///2Drives Syntax: SET {d:} [RO] SET {d:} [RW] Example: A>SET B: [RO] Sets drive B to Read-Only. ///1SETDEF Syntax: SETDEF { d: {,d: {,d: {,d:}}}} {[ TEMPORARY = d: ] | [ ORDER = (typ {,typ}) ]} SETDEF [DISPLAY | NO DISPLAY] SETDEF [PAGE | NOPAGE] Explanation: SETDEF allows the user to display or define up to four drives for the program search order, the drive for temporary files, and the file type search order. The SETDEF definitions affect only the loading of programs and/or execution of SUBMIT (SUB) files. SETDEF turns on/off the system Display and Console Page modes. When on, the system displays the location and name of programs loaded or SUBmit files executed, and stops after displaying one full console screen of information. ///2Examples A>SETDEF Displays current SETDEF parameters. A>SETDEF [TEMPORARY=C:] Sets disk drive C as the drive to be used for temporary files. A>SETDEF C:,* Tells the system to search for a program on drive C, then, if not found, search for it on the default drive. A>SETDEF [ORDER=(SUB,COM)] Instructs the system to search for a SUB file to execute. If no SUB file is found, search for a COM file. A>SETDEF [DISPLAY] Turns on the system display mode. Henceforth, the system displays the name and location of programs loaded or submit files executed. A>SETDEF [NO DISPLAY] Turns off the system Display mode. ///1SHOW Syntax: SHOW {d:}{[SPACE |LABEL |USERS |DIR |DRIVE]} Explanation: The SHOW command displays the following disk drive information: Access mode and the amount of free disk space Disk label Current user number and Number of files for each user number on the disk Number of free directory entries for the disk Drive characteristics ///2Examples A>SHOW A>SHOW [SPACE] Instructs the system to display access mode and amount of space left on logged-in drives. A>SHOW B: Show access mode for drive B and amount of space left on drive B. A>SHOW B:[LABEL] Displays label information for drive B. A>SHOW [USERS] Displays the current user number and all the users on drive A and the corresponding number of files assigned to them. A>SHOW C:[DIR] Displays the number of free directory entries on drive C. A>SHOW [DRIVE] Displays the drive characteristics of drive A. ///1SID Syntax: SID {pgm-filespec} {,sym-filespec} Explanation: The SID symbolic debugger allows you to monitor and test programs developed for the 8080 microprocessor. SID supports real-time breakpoints, fully monitored execution, symbolic disassembly, assembly, and memory display and fill functions. SID can dynamically load SID utility programs to provide traceback and histogram facilities. ///2Commands Command Meaning As (Assemble) Enter assembly language statements s is the start address Cs{b{,d}} (Call) Call to memory location from SID s is the called address b is the value of the BC register pair d is the value of the DE register pair D{W}{s}{,f} (Display) Display memory in hex and ASCII W is a 16-bit word format s is the start address f is the finish address Epgm-filespec (Load) Load program and symbol table {,sym-filespec} for execution E*sym-filespec (Load) Load a symbol table file Fs,f,d (Fill) Fill memory with constant value s is the start address f is the finish address d is an eight-bit data item G{p}{,a{,b}} (Go) Begin Execution p is a start address a is a temporary breakpoint H (Hex) Displays all symbols with addresses in Hex H.a Displays hex, decimal, and ASCII values of a where a is a symbolic expression Ha,b Computes hex sum and difference of a and b where a and b are symbolic expressions Icommand tail (Input) Input CCP command line L{s}{,f} (List) List 8080 mnemonic instructions s is the start address f is the finish address Ms,h,d (Move) Move Memory Block s is the start address h is the high address of the block d is the destination start address P{p{,c}} (Pass) Pass point set, reset, and display p is a permanent breakpoint address c is initial value of pass counter Rfilespec{,d} (Read) Read Code/Symbols d is an offset to each address S{W}s (Set) Set Memory Values s is address where value is sent W is 16 bit word T{n{,c}} (Trace) Trace Program Execution n is the number of program steps c is the utility entry address. T{W}{n{,c}} (Trace) Trace Without Call W instructs SID not to trace subroutines n is the number of program steps c is the utility entry address U{W}{n{,c}} (Untrace) Monitor Execution without Trace n is the number of program steps c is the utility entry address W instructs SID not to trace subroutines V (Value) Display the value of the next available location in memory (NEXT), the next location after the largest file read in (MSZE), the current value of the Program counter (PC), and the address of the end of available memory (END) Wfilespec,s,f (Write) Write the contents of a contiguous block of memory to filespec. f is finish address X{f}{r} (Examine) Examine/alter CPU state. f is flag bit C,Z,M,E or I. r is register A,B,D,H,S or P. ///2Examples A>SID CP/M 3 loads SID from drive A into memory. SID displays the # prompt when it is ready to accept commands. A>B:SID SAMPLE.HEX CP/M 3 loads SID and the program file SAMPLE.HEX into memory from drive B. ///2Utilities SID uO ?N @CHKR 28H,?N-$-1 ENDM JRNZ MACRO ?N @CHKR 20H,?N-$-1 ENDM DJNZ MACRO ?N @CHKR 10H,?N-$-1 ENDM PCIX MACRO DB 0DDH,0E9H ENDM PCIY MACRO DB 0FDH,0E9H ENDM RETI MACRO DB 0EDH,4DH ENDM RETN MACRO DB 0EDH,45H ENDM INP MACRO ?R DB 0EDH,?R*8+40H ENDM OUTP MACRO ?R DB 0EDH,?R*8+41H ENDM INI MACRO DB 0EDH,0A2H ENDM INIR MACRO DB 0EDH,0B2H ENDM IND MACRO DB 0EDH,0AAH ENDM INDR MACRO DB 0EDH,0BAH ENDM OUTI MACRO DB 0EDH,0A3H ENDM OUTIR MACRO DB 0EDH,0B3H ENDM OUTD MACRO DB 0EDH,0ABH ENDM OUTDR MACRO DB 0EDH,0BBH ENDM RLCR MACRO ?R DB 0CBH,00H+?R ENDM RLCX MACRO ?D @CHK ?D DB 0DDH,0CBH,?D,06H ENDM RLCY MACRO ?D @CHK ?D DB 0FDH,0CBH,?D,06H ENDM RALR MACRO ?R DB 0CBH,10H+?R ENDM RALX MACRO ?D @CHK ?D DB 0DDH,0CBH,?D,16H ENDM RALY MACRO ?D @CHK ?D DB 0FDH,0CBH,?D,16H ENDM RRCR MACRO ?R DB 0CBH,08H+?R ENDM RRCX MACRO ?D @CHK ?D DB 0DDH,0CBH,?D,0EH ENDM RRCY MACRO ?D @CHK ?D DB 0FDH,0CBH,?D,0EH ENDM RARR MACRO ?R DB 0CBH,18H+?R ENDM RARX MACRO ?D @CHK ?D DB 0DDH,0CBH,?D,1EH ENDM RARY MACRO ?D @CHK ?D DB 0FDH,0CBH,?D,1EH ENDM SLAR MACRO ?R DB 0CBH,20H+?R ENDM SLAX MACRO ?D @CHK ?D DB 0DDH,0CBH,?D,26H ENDM SLAY MACRO ?D @CHK ?D DB 0FDH,0CBH,?D,26H ENDM SRAR MACRO ?R DB 0CBH,28H+?R ENDM SRAX MACRO ?D @CHK ?D DB 0DDH,0CBH,?D,2EH ENDM SRAY MACRO ?D @CHK ?D DB 0FDH,0CBH,?D,2EH ENDM SRLR MACRO ?R DB 0CBH,38H+?R ENDM SRLX MACRO ?D @CHK ?D DB 0DDH,0CBH,?D,3EH ENDM SRLY MACRO ?D @CHK ?D DB 0FDH,0CBH,?D,3EH ENDM RLD MACRO DB 0EDH,6FH ENDM RRD MACRO DB 0EDH,67H ENDM ֎ TE%hAIZ@RDRVPQ`DE$M R@LOGINP`TD$ 9R@SCRBFPРdD$4(MQR@CMODE d$4dx Q 2@CBNKe$U4D8] QIB@VECTSU`e4%dXA%=Y?TIMOT cE%D$ 9-M2?STBNKS Z`9h  0 000# +"+0(0׀sh+xH&ˀ  -d -0 -k K[@% k   , E@ 6+ٷDdh ) 0 4 `L i 0 4 `L i 0{60 8Z\ >ݤj  vơ\Q 400#?UF fc{68Z,@1Fk <Ď v M`7YxFVm` `-[ =ݒT59.zٷ j\V+60Z.K _ h⻭҅7;eP@ؤt:`p4KG ٷ$ .inx C^(dJ@T n(4jַT6%W@$ d@Ohf.&! ) G#R$ & R&AB@h(N7d2 ! @ !ɠ -   p   748Ch ;@{LD>`4B }iv|i5Ep $Zb$b1#b >cLm  L`2#=,[ # t '! I4Fr@hyC !` X8$ 'Ɣ:Ov,< ai@ joMج.H € d  vU'pX#Pm fe 5 f+vVh " L   @`6ǀU ^2 Xv @ 73 jĿ@L; ͣcG cXdB @ )0@ 0 *  0  h   J@ 6@    h   J@ڡ"b1: x+qhgFr}B5  fѠA(C " m7ie$[!Qu@; | c2 #2 [x d -:`lPGn@6d(1bqxOeYc0 Gі h2~G[ ` $u@ٺ z(;@ 4Ba  Fb!b!h!hp >  xs ! n)3Ø hݥ)NA 23uq e ``hx 8J0! ; l2 c-{f`1n06n+7T!@`c :@A cX 0}G[ l 8ef2;,@=@ݤ@0  , Ot < N! $m1 X!ۀ` AbAT@db'; 3';0ny2 c 8 0(, ,BdÁ|< !@l 0

SUBMIT A>SUBMIT SUBA A>SUBMIT AA ZZ SZ A>SUBMIT B:START DIR E: ///2PROFILE.SUB Everytime you power up or reset your computer, CP/M 3 looks for a special SUBmit file named PROFILE.SUB to execute. If it does not exist, CP/M 3 resumes normal operation. If the PROFILE.SUB file exists, the system executes the commands in the file. This file is convenient to use if you regularly execute a set of commands before you do your regular session on the computer. ///1TYPE Syntax: TYPE {filespec {[ PAGE | NOPAGE ]}} Explanation: The TYPE command displays the contents of an ASCII character file on your screen. [PAGE] Causes the console listing to be displayed in paged mode; i.e., stop automatically after listing n lines of text, where n normally defaults to 24 lines per page. [NOPAGE] Turns off Console Page Mode and continuously displays a typed file on the screen. ///2Examples A>TYPE MYPROG.PLI Displays the contents of the file MYPROG.PLI on your screen. A>TYPE B:THISFILE [PAGE] Displays the contents of the file THISFILE from drive B on your screen twenty four lines at a time. ///1USER Syntax: USER {number} Explanation: The USER command sets the current user number. The disk directory can be divided into distinct groups according to a "User Number." User numbers range from 0 through 15. ///2Examples A>USER Enter User#:5 5A> The current user number is now 5 on drive A. A>USER 3 3A> This command changes the current User Number to 3. ///1XREF Syntax: XREF {d:} filename {$P} Explanation: XREF provides a cross-reference summary of variable usage in a program. XREF requires the .PRN and .SYM files produced by MAC or RMAC for input to the program. The SYM and PRN files must have the same filename as the filename in the XREF command tail. XREF outputs a file of type .XRF. Examples: A>XREF b:MYPROG A>XREF b:MYPROG $P 1Td  CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 6543210123456789ABCDEF ERROR: $Reading file: $Writing file: $Directory full$Reading file: $Writing file: $Invalid drive.$) ? $) ? $) ? $Bad character, re-enter $ $ Disk read error: $File cannot fit into GENCPM buffer: $Unable to open: $BDOS3 BIOS3 Setting up directory hash tables: $ Enable hashing for drive $: $Unable to allocate space for hash table.$ Setting up Allocation vector for drive $ Setting up Checksum vector for drive $ *** Bank 1 and Common are not included *** *** in the memory segment table. *** $Number of memory segments $ CP/M 3 Base,size,bank ($) $ Enter memory segment table: $ Base,size,bank $Zero length segment not allowed.$Bank one not allowed.$ ERROR: Memory conflict - segment trimmed. $Memory conflict - cannot trim segment.$ ERROR: Memory conflict - segment trimmed. $ ERROR: Memory conflict - segment trimmed. $ CP/M 3 Sys $ Memseg No. $ Bank $ Accept new memory segment table entries $Default entries are shown in (parens). Default base is Hex, precede entry with # for decimal $ Use GENCPM.DAT for defaults $Create a new GENCPM.DAT file $Display Load Map at Cold Boot $Number of console columns $Number of lines in console page $Backspace echoes erased character $Rubout echoes erased character $Initial default drive ($:) ? $Top page of memory $Bank switched memory $Common memory base page $Long error messages $Double allocation vectors $Accept new system definition $ CP/M 3.0 System Generation Copyright (C) 1982, Digital Research $ BNKBIOS3 SPR$BIOS3 SPR$BNKBIOS3 SPR$BDOS3 SPR$RESBDOS3 SPR$BNKBDOS3 SPR$ 64K TPA Copyright (C) 1982, Digital Research *** CP/M 3.0 SYSTEM GENERATION DONE ***$   !Tq:UM*T&  !Tp+q:Ud*T  !Tp+q*T#6 :UҀ:Tڀ*T  *T#N ! *T6  7 7!Tr+s+q+q!U6N*TDMN:TTN͜:T.:T/!U!] 6 !m 6 !Tp+q *T 6  *T 6 *T !Tp+q*T !Tp+q*T !Tp+q*T ] ͧ!Tp+q*T } ͧ!Tp+q*T   ͧ *T 6 !Tp+q*T !Tp+q*T! ͧ!Tp+q*T" ͧ! Up+q*T$ !Vr+s+p+q+q:V  *V*VDM*V -- !Vs+p+q:V J *V*VM!VLS!Vq:V e > :Va/>z!V/H҄ :V_2V:V!Vq:V />!V/HҦ >  ͧ> !Vp+q(7*V~ Y7 N7NTe:T *TMV Y*Vw!Vq:VO ! N7:VO ! N7!Vp+q 7*V|O *V}O H7!Vq*V&  +SDM$ !Vp+q!V6 !V60!'"V> V͇S† *VM7 !V6 >!V VVzSڽ !V6:V<2VVVzS+s#rÔ :V *VM7!V60*V! S"V:V<2V‹ !Vs+q(7:V  #7*V& DMZ  *VM N!Vs+p+q+p+q :T : ͜*V6 :V<2VO !T NV 2V  :V,u *V#"V*V6 !V6 :V#… !V6  :V02V:V> !VHҽ >!VҸ :V2Vý !V6!V:V *V^ *V& +S*V& *Vq !V6 *V6   ͧ *V6 ? ͜*VDMN*V~  (7*VN !V6>!Vn *V#"V:V:-Q/HX *V6 d ,7*VN :V<2V, *V++"VNÊ *VN*V !V6!V6Te!Vr+s+q:-Q/Ү > !V6#q#p!V6:5Q!Vڳ *V& +SFQ  VzSک:VM *V& +SFQ  ~  *V& +SFQ  VzSHJ:V2V *V& +SFQ  ^#V"Vé *V& +SFQ  ~  *V& +SFQ  VzSHҩ:V2V *V& +SFQ  ^#V"V:V<2V¿ :V:VH`!V6:5Q!V` *V& +SFQ  VzS/ *V& +SFQ  ~ H *V& +SFQ  VzSHV:V2V *V& +SFQ  ^#V"V:V<2V:V!$V6 !U6ͬ#Q$!H>  U͇Sʔ * U|2Uß *U|2U!U:.Q2T *U|!UO:/Q2T *U|O:T2TUTI:-Q/!$V>O:T2T * U|O:T!$V2T:T=2T * U|O:T2TҮ :-Qқ*nV*U*V  |!UO:/Q2T *U|O:T2T2Uͬ:U/Ҙ!!V6 >!!Vژ*!V& $SQ  6 :!V<2!Vsà!U6 :V/ҫ*:U2T:T2TTͩ:-Q*T&  +SDM*U*T&  +SDM*U:-Q/&:U2!V! ""V*!VM"V͟:!V2U! U6 Û *U|!U2!V * U|!Uo& )##""V*T&  +SDM*!V*!VM"V͟:!V2 U:U2!V! ""V>T͇S+s#r*!VM"V͟:!V2U * U|!$V2T:T2T U(T(TͩC *$V& +ST͊S+s#r * U|!$V2!V:-Q/ *T&  +SDM*!V"*T&  +SDM*!V*!VM"V͟:!V!Uw:-QҢ!T6:T2TULTLTͩ *U|2!V *U|!Uo& )*"V""V*T&  +SDM*!V*!VM"V͟:!V! Uw:,Q/Ҳ:V2V *V& U  :T2T*T& ! S!0 *V&  U q*T& ! S0 *V& !U q:V 2V *T& +S"!U$-U RUW !T6 #6 #6 :.Q2U:/Q2UTqT TyT Uͧ pT !T6Uͧ pT pT :;Rһ!;R6 :%V2.Q:4Q/24QTT TT L!U6N!Vr+s+p+q*V6 *V#6 *V|O ! *V## w*V|O !  *V w*V}O !  *V w*V}O !  *V w!T:TO `iPSW  "V *V :0Qw *V :2Qw *V :1Qw. *V :3Qw*V :4QwX *V   :+Q/ҼW *V >*V w:@*V wW *V >*V w^ *V :/Qw!)X"V*VN#F!W "V*V"V*V͕S(!$V6-!$V6 *VSD*VWR!"&V!V6&VS!V6 >!Vڷ*V& )*&V> ͒Sʭ*V& )*&VWR"(V *(V ͕Sʭ!V6 :V<2Vf:-Q/!V!$V6!$V6 V>X W*V"V*V~> >!Vs+p+q+p+q%N*VDMN 7*VDM$  7*VME :,QҨ *V& U *VDM :V 2V*V& U DM*V:V2V*V& U *V&  +S:V2V*V& U ) :V2V!Vp+q*V"TͣN ,ͧ*VDM !Vr+s+p+q*V^#V"T*V##^#V"T *V ^#V"T*V#DMT  *VDMT  *TZSU͊S@?ͧ*T+ZS}<2V!V6 !V:V҆ *V& +SW "TDMͧ *VDM> :V<2VS*TDMO W*T"T!Vr+s+q:V GTqT TyT *Vn}2T*V#~2TpT WTS} pS}TR+s#r*V& )+!Vs+6 :V!V4>T͇S+s#rBKͧ pT^ :V<2VpT *VT :-Q/k)Tw T z!LT"V!U"V͙!T"V!U"V͙!(T"V! U"V͙*V#DMT  *VDMT *VDMeͧWͧ *VDM> *V*Ws#r*V##*Ws#r *V *Ws#r*VDM> !V6 &VS(> !V6 >!V*V& )*&V> ͒S*V& )*&VWR"(V *(V##  *(V ͕S *(V ͕SH *(V ͕SH *(V ͕SH *(V ͕SH!V6:V<2V-:V!V6 !V6!V6 >!V*V& )*&VWR"(V*V& )*&V> ͒S *(V S?!V6  *(V ͕S:V/c!V6N:VO !=R ~2T *(V WR"*V **V N#F`i))"VN:VAO7N*V& 6Q DMʹ ͜*V& 6Q ~/ *(V q#p:-Q/!V6 *V& ,V) *Vs#r*V*LV"LV*V͛ 2V'  ͧ *V& +SFQ   *(V w *V& +SFQ N `iPS *V& +SFQ  N `iPS *V& +SFQ  ͕S  *(V q#p *V& +SFQ  VzS *V& +SFQ  q#p:V<2V:-Q/!V!$V6:T<<2T:T<<2T!V6 >!V8*V& NV) > w#6 *V& pV) > w#6 :V<2V:!Vڡ*V& )*&V> ͒Sʗ*V& )*&VWR"(V *(V WR"*V *(V ͕SN:VAO7:7!V6 **V ^#V! S*V& +S*V& NV) q#p*V& NV) nVR+s#r *(V ͕S—'N:VAO7:7!V6 **V >R! S*V& pV) s#r*V& ) VR+s#r **V  R*V& pV) CS **V q#p:V<2Vk:Vҫ͜:T2FQ!T:/Q2GQ! "IQ!HQ6 !V6 ON:GR2T 5Q N*FQM ,7*GQM ,7*HQM N:V/҈!N!V6:5Q!V !V6 :V/ :V =O !=R ~2T *V& +SFQ DM  *V& +SFQ  N `iPS *V& +SFQ  q#p *V& +SFQ  ~   ͧ  *V& +SFQ  ~ 7 ͧ  *V& +SFQ ~2V*V&  *V& +SFQ  N "V*V| *V}O:/QH҆MN!V:/Q *V& +SFQ  Hq!V:/QO `iPS *V& +SFQ  q#p *V}2V!V6 !V6!V:V#  *V& +SFQ ~2V *V& +SFQ  :V2V *V& +SFQ   *V& +SFQ  !V:V/+~!V/H+  | ͧ!V6 :V!V+~!VHc N *V& +SFQ :Vw!V6 :V!V+~!VH N!V:V *V& +SFQ  Hq!V:VO `iPS *V& +SFQ  q#p!V6 :V<2V×1:V<2V"͜!V6 :5Q!Vo!:V !N!N:V=O  *V& +SFQ NE  *V& +SFQ  NE :-Qb!N *V& +SFQ  N ͜:V<2V !T6 !V6%NVʹ ͜PNT2V!TT TT N!V6Vʹ ͜:V!FT !!U6+6 ! W6 ͌!: W/җ#:R2T͜N;Rʹ :=R2T͜͜N,Qʹ ͜͜:>R2T:2Q<22Q  2Q :2Q=22Q:?R2T:1Q<21Q' 1Q :1Q=21Q:@R2THN3Qʹ ͜:AR2TkN4Qʹ ͜͜:BR2TN:0QAO7NTe:T "*TMV A2W*WM͈ /"Þ":W20Q͜͜:CR2T.Q *.Q& PS "U:DR2TN-Qʹ ͜:-Q/2T:-Q[#:ER2T/Q ͜:FR2TN+Qʹ ͜x#:R2T͜N!W#*W& U 6 :W<2W#!W6>!W $*W& U 6$:W<2W#!V6*V& U  !V6TqT TyT Wͧ pT^ pT^ W S#ZS"U!W6 >!Wڋ$*W& ,V) > w#6 :W<2Wh$! "LV:] A$!U6#6 !W6 >!W$*W& =R 6 :W<2W¦$$!U6 #6:m D$!U6!T6 Available space in 256 byte pages: $TPA =$, Bank 0 =$, Other banks =$Unable to allocate Dir deblocking buffer space.$Unable to allocate Data deblocking buffer space.$Unable to allocate Data deblocking buffer space.$Drive specified has not been defined. $0FFFFH is an invalid value in the DPH directory BCB address field.$ Setting up Blocking/Deblocking buffers: $ The physical record size is$: $ *** Directory buffer required *** *** and allocated for drive $: *** $ Overlay Directory buffer for drive $: $ Number of directory buffers for drive $: $Minumum number of buffers is 1. $ Number of directory buffers for drive $: $ *** Maximum number of directory buffers *** *** for the current drive is$. *** *** Number of directory buffers reduced *** *** accordingly. *** $ Share buffer(s) with which drive ($:) ? $ *** Data buffer required and *** *** allocated for drive $: *** $ Overlay Data buffer for drive007D 23 inx h 007E EB xchg ;DE=init entry point 007F 21F401 lxi h,cdtbl 0082 09 dad b 0083 09 dad b 0084 47 mov b,a 0085 79 mov a,c 0086 FE0C in1: cpi 12 0088 D2B300 jnc in4 ;if device # overflows, adjust next step. 008B 73 mov m,e ; 008C 23 inx h ; 008D 72 mov m,d ; 008E 23 inx h ; 008F 3C inr a djnz in1 0090+10F4 DB 10H,IN1-$-1 0092 1B dcx d 0093 1A ldax d ;number of devices 0094 47 in3: mov b,a 0095 79 mov a,c ;DE=module address, C=device base 0096 87 add a ; *2 0097 87 add a ; *4 0098 87 add a ; *8 0099 4F mov c,a 009A 78 mov a,b ;number of devices 009B 0600 mvi b,0 009D 21B301 lxi h,@ctbl 00A0 09 dad b 00A1 EB xchg ;DE=@ctbl indexed by device base 00A2 0E12 mvi c,17+1 ;B=0 still, point to CHRTBL vector 00A4 09 dad b ;point to chrtbl location 00A5 4E mov c,m 00A6 23 inx h 00A7 66 mov h,m 00A8 69 mov l,c ;HL=chrtbl 00A9 87 add a 00AA 87 add a 00AB 87 add a ;num.dev * 8 = number of bytes in module's table. 00AC 4F mov c,a ;B=0 still ldir ;copy modules chrtbl into system table. 00AD+EDB0 DB 0EDH,0B0H 00AF E1 in2: pop h 00B0 C36600 jmp in0 00B3 91 in4: sub c ;compute number of devices that will fit. 00B4 C29400 jnz in3 ;continue with initialization of tables 00B7 C3AF00 jmp in2 notchr: ;HL point to init entry 00BA D5 push d 00BB CDFA02 call icall ;"call" (HL) 00BE E1 pop h 00BF C36600 jmp in0 00C2 CDC500 clrpio: call twice twice: reti 00C5+ED4D DB 0EDH,4DH init$done: ;all Disk I/O modules are initialized. 00C7 0E0B mvi c,11 00C9 C5 in5: push b 00CA CD1702 call cinit 00CD C1 pop b 00CE 0D dcr c 00CF F2C900 jp in5 00D2 2A7F00 lhld icovec 00D5 220000 shld @covec ;set console I/O 00D8 2A7D00 lhld icivec 00DB 220000 shld @civec ; 00DE 2A8500 lhld ilovec 00E1 220000 shld @lovec ;set list output device 00E4 2A8300 lhld iaovec 00E7 220000 shld @aovec ;set auxiliary I/O device 00EA 2A8100 lhld iaivec 00ED 220000 shld @aivec ; 00F0 217800 lxi h,defsrc 00F3 110100 lxi d,@ermde+1 ;location of default search chain in SCB 00F6 010500 lxi b,5 ldir 00F9+EDB0 DB 0EDH,0B0H 00FB 3A7C00 lda srctyp 00FE E618 ani 000$11$000b 0100 4F mov c,a 0101 3AF6FF lda @civec-10 ;location of search type flags in CCP section 0104 E6E7 ani 111$00$111b 0106 B1 ora c 0107 32F6FF sta @civec-10 010A 114203 lxi d,signon 010D 0E09 mvi c,9 010F CD8F00 call bdose ; was there enough RAM? 0112 CD7C01 call set$jumps ;setup system jumps and put in all banks ; fetch CCP for first time, system will put it in bank 1. 0115 3EFE mvi a,0feh ;don't try warm boot on error... 0117 320000 sta @ermde ; 011A 117A03 lxi d,ccp$com 011D 0E0F mvi c,15 ;open file 011F CD8F00 call bdose 0122 3C inr a 0123 CAED01 jz noccp 0126 AF xra a 0127 329A03 sta fcb$nr 012A 110001 lxi d,ccp 012D 0E1A mvi c,26 ;set DMA address 012F CD8F00 call bdose 0132 1E40 mvi e,64 ;read upto 64 records (8K) 0134 0E2C mvi c,44 ;set multi-sector count 0136 CD8F00 call bdose 0139 117A03 lxi d,ccp$com 013C 0E14 mvi c,20 ;read record(s) 013E CD8F00 call bdose 0141 7C mov a,h ;H=number of records actually read 0142 327903 sta ccprecs 0145 AF xra a ;back to 0146 320000 sta @ermde ;default mode for user 0149 010100 lxi b,0001h ; save CCP in bank 0 for warm boots. 014C CD6601 call xmovccp ;NOTE: this restricts banked OS size. 014F C38700 jmp goccp ; (allowing 8K for "CCP" and reserving page 0) 0152 CD7C01 wboot1: call set$jumps ; initialize page zero, selects bank 0 0155 010001 lxi b,0100h 0158 CD6601 call xmovccp 015B 2A7500 lhld wbtrap ; allow I/O modules to partake in the warm$boot. 015E 7C mov a,h ; 015F B5 ora l ; 0160 C4FA02 cnz icall ; 0163 C38700 jmp goccp xmovccp: 0166 CD1E03 call xmove 0169 3A7903 lda ccprecs 016C 47 mov b,a 016D 0E00 mvi c,0 srlr b 016F+CB38 DB 0CBH,38H+B rarr c ;BC=number of bytes in CCP 0171+CB19 DB 0CBH,18H+C 0173 210001 lxi h,ccp 0176 110001 lxi d,ccp 0179 C32903 jmp move set$jumps: 017C 3EC3 mvi a,(JMP) 017E 3200003205 sta cpm ! sta bdos ; set up jumps in page zero 0184 2103002201 lxi h,BIOS$0+3 ! shld cpm+1 ; BIOS warm start entry 018A 2A00002206 lhld @mxtpa ! shld bdos+1 ; BDOS system call entry 0190 010001 lxi b,0100h ;source bank 0, dest bank 1 0193 CD1E03 call xmove 0196 210000 lxi h,0 0199 110000 lxi d,0 019C 014000 lxi b,64 019F CD2903 call move 01A2 010002 lxi b,0200h ;source bank 0, dest bank 2 01A5 CD1E03 call xmove 01A8 210000 lxi h,0 01AB 110000 lxi d,0 01AE 014000 lxi b,64 01B1 CD2903 call move 01B4 010003 lxi b,0300h ;source bank 0, dest bank 3 01B7 CD1E03 call xmove 01BA 210000 lxi h,0 01BD 110000 lxi d,0 01C0 014000 lxi b,64 01C3 C32903 jmp move ?timot: ; (B)=I.D. (C)=count, (DE)=routine address 01C6 D5 push d 01C7 1E02 to1: mvi e,numtic 01C9 219E03 lxi h,tictbl 01CC F3 di 01CD 7E to0: mov a,m 01CE FEFF cpi true jrz to2 01D0+2811 DB 28H,TO2-$-1 01D2 B8 cmp b jrz to2 01D3+280E DB 28H,TO2-$-1 01D5 23 inx h 01D6 23 inx h 01D7 23 inx h 01D8 23 inx h 01D9 1D dcr e jrnz to0 01DA+20F1 DB 20H,TO0-$-1 01DC FB ei 01DD 79 mov a,c ;don't wait if all it wants is to clear a possible 01DE B7 ora a ;existing entry, since none exists for that module. jrnz to1 ;-- maybe we should "ei hlt" and then jump -- 01DF+20E6 DB 20H,TO1-$-1 01E1 D1 pop d 01E2 C9 ret to2: 01E3 D1 pop d 01E4 70 mov m,b 01E5 23 inx h 01E6 71 mov m,c 01E7 23 inx h 01E8 73 mov m,e 01E9 23 inx h 01EA 72 mov m,d 01EB FB ei 01EC C9 ret 01ED 116F03 noccp: lxi d,ccp$msg 01F0 0E09 errx: mvi c,9 01F2 CD8F00 call bdose 01F5 F376 di ! hlt 01F7 0C gett: inr c ;test for "FF" 01F8 CA8D02 jz sett ;FF=set time 01FB 11140A ti0: lxi d,rtcsts+(numrtc shl 8) 01FE 21DC03 lxi h,time 0201 012002 lxi b,rtcadr+(rtcsec shl 8) ti1: outp b ;select reg 0204+ED41 DB 0EDH,B*8+41H 0206 04 inr b 0207 DB24 in rtcdta 0209 77 mov m,a 020A 23 inx h outp e ;select status reg 020B+ED59 DB 0EDH,E*8+41H 020D DB24 in rtcdta 020F B7 ora a jrnz ti0 0210+20E9 DB 20H,TI0-$-1 0212 15 dcr d jrnz ti1 0213+20EF DB 20H,TI1-$-1 0215 3AE103 lda timemon ;if last accessed month is greater 0218 21E503 lxi h,lstmnth ;than current month, the year must be 021B BE cmp m ;changed. 021C DC9003 cc setyear$1 ;assumes 1 year elapsed 021F 3ADC03 lda timesec 0222 320000 sta @sec 0225 3ADD03 lda timemin 0228 320000 sta @min 022B 3ADE03 lda timehrs 022E 320000 sta @hour 0231 3E1C mvi a,28 0233 32D103 sta mondays+1 ;set February=28 0236 3AE303 lda timeyrs 0239 CDA803 call bcdbin 023C 47 mov b,a 023D 3AE403 lda timecnt 0240 D619 sui 19h 0242 78 mov a,b jrz ti1@0 0243+2802 DB 28H,TI1@0-$-1 0245 C664 adi 100 ;adjust for century 0247 D64E ti1@0: sui 78 ;years since 1978 (base year) 0249 47 mov b,a ; 024A 3C inr a ;adjustment for leap year calc. 024B 4F mov c,a ; srlr c ; 024C+CB39 DB 0CBH,38H+C srlr c ;divide by 4 = number of leap years (exclusive) 024E+CB39 DB 0CBH,38H+C 0250 E603 ani 11b 0252 FE03 cpi 11b ;is this year a leap year? jrnz ti2 0254+2005 DB 20H,TI2-$-1 0256 3E1D mvi a,29 0258 32D103 sta mondays+1 ;set february=29 025B 210000 ti2: lxi h,0 025E 116D01 lxi d,365 0261 19 ti3: dad d ;find number of days since 1978 djnz ti3 0262+10FD DB 10H,TI3-$-1 0264 09 dad b ;(B=0) add in 1 day for each leap year 0265 3AE003 lda timedat 0268 CDA803 call bcdbin 026B 4F mov c,a 026C 0600 mvi b,0 026E 09 dad b ;add in days of this month 026F 3AE103 lda timemon 0272 CDA803 call bcdbin 0275 3D dcr a ;if January, nothing left to add. jrz ti4 0276+280E DB 28H,TI4-$-1 0278 47 mov b,a 0279 11D003 lxi d,mondays ;add in days of each month upto this. 027C 1A ti5: ldax d 027D 13 inx d 027E 85 add l 027F 6F mov l,a 0280 3E00 mvi a,0 0282 8C adc h 0283 67 mov h,a djnz ti5 0284+10F6 DB 10H,TI5-$-1 0286 220000 ti4: shld @date 0289 3A0000 lda @sec 028C C9 ret 028D 3A0000 sett: lda @hour 0290 32DE03 sta timehrs 0293 3A0000 lda @min 0296 32DD03 sta timemin 0299 3A0000 lda @sec 029C 32DC03 sta timesec 029F 2A0000 lhld @date 02A2 116D01 lxi d,365 02A5 3E1C mvi a,28 02A7 32D103 sta mondays+1 ;set february=28 02AA 0600 mvi b,0 ;start counting years since 1978 02AC 78 ti6: mov a,b ; check for leap year 02AD E603 ani 11b ;every 4 years, 02AF EE02 xri 10b ;starting with 1980 jrnz ti7 02B1+2001 DB 20H,TI7-$-1 02B3 37 stc ;one extra day for leap years ti7: dsbc d ;does this year fit in @date? 02B4+ED52 DB 0EDH,D*8+42H 02B6 04 inr b ;count a year. jrnc ti6 ;yes, keep taking out more days (by years) 02B7+30F3 DB 30H,TI6-$-1 02B9 78 mov a,b ;is this year a leap year? 02BA E603 ani 11b 02BC EE02 xri 10b jrnz ti8 02BE+2006 DB 20H,TI8-$-1 02C0 3E1D mvi a,29 02C2 32D103 sta mondays+1 ;February=29 02C5 37 stc ti8: dadc d ;normalize @date (we subtracted one too many) 02C6+ED5A DB 0EDH,D*8+4AH 02C8 05 dcr b 02C9 78 mov a,b 02CA C64E adi 78 ;adjust year to 1900 02CC 0613 mvi b,19 ;century 02CE FE64 cpi 100 jrc ti8@0 02D0+3803 DB 38H,TI8@0-$-1 02D2 04 inr b 02D3 D664 sui 100 02D5 CDB603 ti8@0: call binbcd 02D8 32E303 sta timeyrs 02DB 78 mov a,b 02DC CDB603 call binbcd 02DF 32E403 sta timecnt 02E2 EB xchg ;remainder into DE 02E3 0601 mvi b,1 ;start taking out months. 02E5 21D003 lxi h,mondays 02E8 7B ti9: mov a,e 02E9 96 sub m 02EA 4F mov c,a 02EB 7A mov a,d 02EC DE00 sbi 0 jrc ti10 02EE+3809 DB 38H,TI10-$-1 02F0 59 mov e,c 02F1 57 mov d,a 02F2 23 inx h 02F3 04 inr b 02F4 78 mov a,b 02F5 FE0D cpi 13 jrc ti9 02F7+38EF DB 38H,TI9-$-1 02F9 78 ti10: mov a,b 02FA CDB603 call binbcd 02FD 32E103 sta timemon 0300 32E503 sta lstmnth ;also set last accessed month 0303 7B mov a,e ;left-over must be date of month 0304 CDB603 call binbcd 0307 32E003 sta timedat ; set day-of-week using Zeller's congruence: 030A 3AE303 lda timeyrs ;E=([2.6m-.2]+K+D+[D/4]+[C/4]-2C) mod 7 030D CDA803 call bcdbin ;0=sunday 0310 57 mov d,a 0311 3AE103 lda timemon 0314 CDA803 call bcdbin 0317 42 mov b,d 0318 D602 sui 2 jrz ti11 031A+2802 DB 28H,TI11-$-1 jrnc ti12 031C+3003 DB 30H,TI12-$-1 031E C60C ti11: adi 12 0320 05 dcr b 0321 4F ti12: mov c,a 0322 87 add a 0323 81 add c ;*3 0324 87 add a 0325 87 add a ;*12 0326 81 add c ;*13 0327 3D dcr a 0328 0E00 mvi c,0 032A 0C ti13: inr c 032B D605 sui 5 jrnc ti13 032D+30FB DB 30H,TI13-$-1 032F 0D dcr c 0330 3AE003 lda timedat 0333 C5 push b 0334 CDA803 call bcdbin 0337 C1 pop b 0338 81 add c ;[2.6m-.2]+K 0339 80 add b ;+D srlr b 033A+CB38 DB 0CBH,38H+B srlr b ; [D/4] 033C+CB38 DB 0CBH,38H+B 033E 80 add b ;+[D/4] 033F 4F mov c,a 0340 3AE403 lda timecnt ;century 0343 CDA803 call bcdbin 0346 47 mov b,a slar b ; 2*C 0347+CB20 DB 0CBH,20H+B srlr a ;; 0349+CB3F DB 0CBH,38H+A srlr a ; [C/4] 034B+CB3F DB 0CBH,38H+A 034D 81 add c ;+[C/4] 034E 90 sub b ;-2*C 034F 4F mov c,a 0350 F25503 jp ti14 neg 0353+ED44 DB 0EDH,44H 0355 0600 ti14: mvi b,0 0357 04 ti15: inr b 0358 D607 sui 7 jrz ti16 035A+2807 DB 28H,TI16-$-1 jrnc ti15 035C+30F9 DB 30H,TI15-$-1 bit 7,c 035E+CB79 DB 0CBH,7*8+C+40H jrnz ti16 0360+2001 DB 20H,TI16-$-1 0362 05 dcr b 0363 78 ti16: mov a,b 0364 87 add a 0365 80 add b ;*3 0366 87 add a 0367 80 add b ;*7 bit 7,c 0368+CB79 DB 0CBH,7*8+C+40H jrz ti17 036A+2802 DB 28H,TI17-$-1 neg 036C+ED44 DB 0EDH,44H 036E 47 ti17: mov b,a 036F 79 mov a,c 0370 90 sub b 0371 3C inr a 0372 32DF03 sta timeday 0375 3E12 mvi a,clrcnt ; 0377 D320 out rtcadr ; 0379 3E03 mvi a,00000011b ;reset fractional seconds 037B D324 out rtcdta ;we now have one second to set time 037D 160A mvi d,numrtc 037F 21DC03 lxi h,time 0382 012002 lxi b,rtcadr+(rtcsec shl 8) ti18: outp b ;select reg 0385+ED41 DB 0EDH,B*8+41H 0387 04 inr b 0388 7E mov a,m 0389 D324 out rtcdta 038B 23 inx h 038C 15 dcr d jrnz ti18 038D+20F6 DB 20H,TI18-$-1 038F C9 ret setyear$1: 0390 77 mov m,a ;set last-month 0391 2B dcx h 0392 2B dcx h 0393 7E mov a,m 0394 C601 adi 1 0396 27 daa 0397 77 mov m,a jrnc sy0 0398+3007 DB 30H,SY0-$-1 039A 23 inx h 039B 7E mov a,m 039C C601 adi 1 039E 27 daa 039F 77 mov m,a 03A0 2B dcx h 03A1 1603 sy0: mvi d,3 ;3 registers to update 03A3 012008 lxi b,rtcadr+(rtcyrs shl 8) jr ti18 03A6+18DD DB 18H,TI18-$-1 03A8 47 bcdbin: mov b,a 03A9 E60F ani 00001111b 03AB 4F mov c,a 03AC 78 mov a,b 03AD E6F0 ani 11110000b 03AF 0F rrc 03B0 47 mov b,a 03B1 0F rrc 03B2 0F rrc 03B3 80 add b 03B4 81 add c 03B5 C9 ret 03B6 D664 binbcd: sui 100 jrnc binbcd 03B8+30FC DB 30H,BINBCD-$-1 03BA C664 adi 100 03BC 0E00 mvi c,0 03BE D60A bb0: sui 10 03C0 0C inr c jrnc bb0 03C1+30FB DB 30H,BB0-$-1 03C3 C60A adi 10 03C5 0D dcr c slar c 03C6+CB21 DB 0CBH,20H+C slar c 03C8+CB21 DB 0CBH,20H+C slar c 03CA+CB21 DB 0CBH,20H+C slar c 03CC+CB21 DB 0CBH,20H+C 03CE B1 ora c 03CF C9 ret 03D0 1F1C1F1E1Fmondays: db 31,28,31,30,31,30,31,31,30,31,30,31 time: 03DC 00 timesec: db 0 03DD $: $ Number of data buffers for drive $: $Minumum number of buffers is 1. $ Number of data buffers for drive $: $ Share buffer(s) with which drive ($:) ? $ Allocate buffers outside of Common $ Accept new buffer definitions $!W6 >!W**W& )*&V> ͒S**W& )*&VWR"(V ͕S *(V ͕SHҸ* *(V WR"*V **V ^ 6 *W& $SQ q#p*W& $SQ  6  *(V ͕S*% ͧ!W4*!W6 >!W+! "HW}2W>!W=+*W& $SQ HW|S ~ H6+*W& $SQ ^#V"HW!W4**W& ))lW *HWs#r*W& ))  > w#6 !W6 >!W+*W& $SQ HW|S> ͇SH+*W& ))lW  *W 6 DS+s#r*W& $SQ  6!W4h+!W4*!W6 >!W7, *W& +SFQ  *W& W) N#Fq#p *W& +SFQ  *W& 7W w!W4+:-QF,!fW6K,!fW6 !W6 :W4:fW=2iW! "gW"dW}2 W! W6*T& PS*LViS"bW:-Qڞ,nVbWzS*ViS"bW!W6 >!W,*W& W)  *W& +SKQ  N#Fq#p*W& $SQ  6 !W4£,!W6 ! W6#6!W6 n& ))lW  ^#V"JW*W& ))lW > ͒S:WH3:WE-1&N!W6]&N*W& ))lW N#F$ {&N!W6 >JWR>fS:WHҚ-!JWVS+s#r!W4g-!JWVS+s#r:W3*W& )*&VWR"(V WR"*V >RZS"^W **V  ͕S-!W6-!W6  *(V ͕Sc0bB*W& $SQ  >w:-Q.: Wd.! W6 *W& $SQ  6&N:WAO7&N.:W{O !=R ~2T&N:WAO7'N*W& $SQ  DMʹ ͜*W& $SQ  ~.*W& $SQ  6.*W& $SQ  6 t/:W;O !=R ~2T'N:WAO7>'*W& $SQ  DM  : Wt/! W6 *W& $SQ  ~ t/ A' ͧb'N:WAO7'*W& $SQ  DM  &/*W& $SQ  ~^W͇Sҹ/'N*^WDM$ 'N*W& $SQ  *^Ws*W& $SQ  ~ R0:W[O !=R ~2TM(N*W& $SQ  ~AO7(NTe:T L0*TMV A2 W* WM͈ *0/* WMF80/*W& $SQ  : Ww͜c0*WMTC c0 4 *(V ͕Sn3!W6 *W& $SQ >͒S°0 *(V q#p*W& $SQ  6 n3bB*W& $SQ  >w:-Qګ1: W1:W1! W6!W6*W& $SQ  6(N:WAO7(N1: W1!W6! W6 :Wʨ1:WƋO !=R ~2T(N:WAO7)N*W& $SQ  DMʹ ͜*W& $SQ  ~ґ1*W& $SQ  6 è1*W& $SQ  6! W6S2:WKO !=R ~2T)N:WAO76)*W& $SQ  DM  *W& $SQ  >w: WS2! W6 *W& $SQ  ~ S2 9) ͧZ)N:WAO7)*W& $SQ  DM  2*W& $SQ  ~ $3: WҌ2! W6 *W& $SQ  :Ww 3:WkO !=R ~2T)N*W& $SQ  ~AO7)NTe:T 3*TMV A2 W* WM͈ 2Ü2* WMF2Ü2*W& $SQ  : Ww͜*W& $SQ  :Wwn3:U!W]3:W+O !=R ~2T)N*W& $SQ  DMʹ ͜*WMTC n3 4! W6 *W 6 dWDS+s#r!W4>JWR>fS:WHҿ3!JWVS+s#r!W4Ì3!JWVS+s#rç-!W4n& ))lW  ^#V"JW-!T6 !W6:W 4bB)NWʹ ͜P,! "PW}2Wo& "TW2W>!Wu5*W& $SQ  ~ n5*W& $SQ  ~  >Hһ4:-Q|4!W4á4*W& $SQ ! ^ N#F-S*TW"TW*W& $SQ  ^ *PW"PW*W& $SQ  ~  >Hn5:-Q/5!W4*W& $SQ  ~,5*W& $SQ ! ^ N#F-S*TW"TWT5*W& $SQ ! ^ N#F-S*TW"TW*W& $SQ  ^ *PW"PW!W4#4*fW& *PW+S*W& ) "RW:-Q9W*U"jW*RW*U*TW *LV *V *nV  |O:.QO:T2UO:T2T:T2T:T2T|2U!T2.QW"T*T& PS*U "ZW*RW "VW*T"`W*`WW !T͕SC6*`WW 6 *`W#"`W6!W6 n& ))lW  ^#V"JW*W& ))lW > ͒S:WH9!W6 >JWR>fS:WHҶ6!JWVS+s#r!W4Ã6!JWVS+s#r:W8*W& )*&VWR"(V*W& $SQ  >«7*W& $SQ  ~ h7*jW6 *jW *VWs#r*W& $SQ VWR+s#r *(V *ZWs#r:fWZWR+s#r:fWjWR+s#rë7*(V"LW*W& $SQ  n& )*&VWR"(V ^#V"NW*LW"(V *NWs#r*W& $SQ  >£8*W& $SQ  ~ 48*jW6 *jW *VWs#r*W& $SQ VWR+s#r *(V *ZWs#r:fWZWR+s#r:fWjWR+s#rã8*(V"LW*W& $SQ  >o& )*&VWR"(V!Q  > ʂ8 *(V ^#V"NWÐ8 *(V ^#V"NW*LW"(V *NWs#r!W4>JWR>fS:WH8!JWVS+s#r!W4ç8!JWVS+s#r6!W4n& ))lW  ^#V"JW\6!W6 >!Wc9*W& ,V) > ͒S\9*W& )*&VWR"(V *VWs#r*W& ,V) VWR+s#r!W4 9!W6 >!W9*W& )*&VWR"(V*W& NV) > ͒Sʽ9 *(V *VWs#r*W& NV) VWR+s#r*W& pV) > ͒S9 *(V *VWs#r*W& pV) VWR+s#r!W4h9aB!W6 >!W::*W& W)  *W& +SFQ  N#Fq#p!W4:*V*RW*nV "RW>  U͇SUzSH҇:*TW*U |O:.QO:T2Uá:*TW* U |O:.QO:T2U!U:T2T:T2T:T2T:.Q2.Q* U} pS} URU͊S"`W>  U͇SUzSHB; *RW|O:/Q2T*U}pS}URW"\W*T& PS"XW*T& PS*U "VWÇ;*RW*`W |O:/Q2TW*U"\WO `iPS*`W "XW*T& PS* U "VW*RW*\W"T *U|O:T2T*W& )*\W"jW*XW"ZWWTS"U*T"`W*`WW !T͕S;*`WW 6 *`W#"`W;!W6!W6 !W6:5Q!WS< *W& +SFQ  2W!FQ  ~ :W!WHL<:W2W:W2W!W4;:T2FQ!T:/Q2GQ:W< *W& +SFQ  O:T< *W& +SFQ  N `iPS! ͕S"`W!FQ :T w *W& +SFQ  N `iPS*`WiS! q#p!W6 n& ))lW  ^#V"JW*W& ))lW > ͒S:WHғA!W6 >JWR>fS:WHh=!JWVS+s#r!W45=!JWVS+s#r:WxA*W& )*&VWR"(V*W& $SQ  >0?*W& $SQ  ~ >*(V"LW*W& $SQ  n& )*&VWR"(V ^#V"NW*LW"(V *NWs#r0?*\W*ZWs#r *(V *XWs#r*XW##"XW*\W##"\W!W6*W& $SQ  ~!W ?*W& $SQ ^#V͛ 2W*jW6 *W& +SFQ N `iPS! N `iPS! ͕S  *jW q#p *jW 6  *W& +SFQ  *W& $SQ |S+s#r:fWZWR+s#r *jW s#r:fWjWR+s#r!W46>:fWjW͇S+s#r! > w#6 :fWjWR+s#r*W& $SQ  >1A*W& $SQ  ~ ¤?*(V"LW*W& $SQ  n& )*&VWR"(V ^#V"NW*LW"(V *NWs#r1A*\W*ZWs#r *(V *XWs#r*XW##"XW*\W##"\W!W6*W& $SQ  ~!W A*W& $SQ  ~ҩ@*W& $SQ ^#V͛ 2W*jW6 *W& +SFQ N `iPS! N `iPS! ͕S  *jW q#p *W& +SFQ   *jW w *W& +SFQ  *W& $SQ |S+s#r@*jW6 *jW *VWs#r*W& $SQ VWR+s#r *jW 6 :fWZWR+s#r *jW s#r:fWjWR+s#r!W4?:fWjW͇S+s#r! > w#6 :fWjWR+s#r!W4>JWR>fS:WHhA!JWVS+s#r!W45A!JWVS+s#ru=!W4n& ))lW  ^#V"JW=!W6 >!WA*W& 7W  *W& +SFQ  w!W4˜A!W6 >!WaB*W& )*&VWR"(V*W& NV) > ͒S"B *(V *ZWs#r*W& NV) ZWR+s#r*W& pV) > ͒SZB *(V *ZWs#r*W& pV) ZWR+s#r!W4A! "W"W!W6:5Q!WB *W& +SFQ  ~ ¶B *W& +SFQ  VS*W"WB *W& +SFQ  VS*W"W!W4pB$N%N!bWVSDM$ :-QMC%N*WDM$ :U C$%N*WDM$ > W͇S> W͇SHHC!W6MC!W6 ͜͜!Ws+q*W& $SQ ^#V"W:-QڋC:fWWRbW͊S+s#rF!iW55:W®D*W& $SQ  ~2W!W6:W!WګD!fW:iWYD!iW6*gW#"gW!W6!W6 !W6:5Q!W7D *W& +SFQ  2W!FQ  ~ :W!WH0D:W2W:W2W!W4C *W& +SFQ   S+s#rcD!fW:iW2iW*W͛ 2W…D 4% ͧ> äD *W& +SFQ  WzS+s#r!W4±CF*W& $SQ  ~2W!W6:W!WF!fW:iWoE!iW6*gW#"gW!W6!W6 !W6:5Q!WME *W& +SFQ  2W!FQ  ~ :W!WHFE:W2W:W2W!W4D *W& +SFQ   S+s#ryE!fW:iW2iW*W& $SQ  ~ڼEWbWzS+s#rYS:/QpSҹE d% ͧ> E*W͛ 2WE % ͧ> E *W& +SFQ  WzS+s#r!W4D>!Wq*W 6 dWR> fS'F>  % ͧ>ERROR: $ at line $Missing parameter variable$Equals (=) delimiter missing$Invalid drive ignored$Invalid character$Invalid parameter variable$! "WWͧ !W6!W6 :W GG:WG͈K2W:WFIGF GF!Wr+s+q:U2W!U65FN*WDMN>FN*WDMZ :WCG.͜:W2U:WoG!W6 T lG!W6sG!W4MG*W& W ~2W:W :W H:W HG:W ·G*W#"WMG*W& W ~2WÄG:Wa/>z!W/HG:W_2W:WG!W6:W!W6 :W/:W/HI!W6 >!W/H*W& W 6 !W4HtG2W!W6 :W:W=H:W H:W/H~H*W& W :WwtG2W!W4:H:W=:W H:W/HҧHtG2W~H:W I:W=> !WHH!W6 I:W=HHF GH:W HcF G:W :W/H ItG2WHGtG2W!W6 !T:W:W H:W/H[I*W& T :Ww!W4~`i+wtG2WI:W :W/HxItG2W[I!W6 #6> !W҇K *W& +S P  ^#V"W! P  ~2W J:W I:WA2WI:W0/>9!W/HI:W02WI:WA 2W *W& +S P  ^ *W& +S*W"W*W& T ~?[J *W& +S P  :WO !=R 6!U6!W4!T5> !T҇K:W ʧJ*W& T ~A/>P/HҜJ*W& T ~A*WwäJF GÇK:W J*W& T ~Y*WwÇK!W6*W6 !W6 :T=!WڇK:W!WO !T ~2W, K*W#"W6 !W6ÀK:W#K!W6 ÀK:W02W:W> !WHQK>!WLK:W2WQK!W6!W:WxK*W^ *W& +S*W& sÀKF G!W4J!W6 !W6 :W:W/HK!W6 :W *W& +S P *W& *W& W HK!W4éK:WK!W6K!W4ÒK:WL>:WWͧ T. T~ !W6!W6 >!WN!W6 #n&  +S P  ~2W!W6 :W:W/H N!W6 >!WڞL'N *W& +S P *W& *W& W w!W4gL:W °L!W6L:W L:WA*W& W wL:W L:W0*W& W wL:WA *W& W w'N*W& W 6 'N*W& W 6='N*W& W 6  *W& +S P  ! ^ *W& +SR"W:W mM'N*W~A*W& W wM:W ʞM'N*W~ҐM*W& W 6YÛM*W& W 6NM*WNbN:WM'N*W& W 6,*W#"W*WNbN'N*W& W 6,*W#"W*WNbN'N*W& W 6 'N*W& W 6 !W4PL!W4'L>!W NT^ T :W]NT^ !W6 >!WUN*W& W 6!W4:N!W6 aN!W4!Wq'N:WO ! *W& W w'N:WO ! *W& W wO *TDM}oN*T †O] !O> 2 PW:TgxʀO { O: PO*T !O†O~#o}o|O<O:TzO<.O:TƜzO<8O:TzO:TzO:TotOzO:TgN! |!| PRTMSG  ,QPAGWID 2QPAGLEN 1QBACKSPC 3QRUBOUT 4QBOOTDRV 0QMEMTOP .QBNKSWT -QCOMBAS /QLERROR  +QNUMSEGS  5QMEMSEG00 KQHASHDRVA6QALTBNKSA +QNDIRRECA ;QNDTARECA KQODIRDRVA [QODTADRVA kQOVLYDIRA {QOVLYDTAA QCRDATAF ;RDBLALV ))덑o|gS =S^#V))) DM! >)):S =2S_ og^#V) PS^#V|g}o ZS_ {ozgO {ozgi`N#Fogo& og_ {_z#W BNKBIOS3SPR RESBDOS3SPR BNKBDOS3SPR CPM3 SYS GENCPM DAT . $  $  N wy! "(9"f1f! Ҕ2!  ~#foCOPYRIGHT (C) 1982, DIGITAL RESEARCH 151282  KK{< <ʽ < K  : >! ~6 69BK! OS }!,"** NK6  :+O K2$^#V#N#FxNp:$p:Gjxj Y# A>QFQx>QGQx3ڰbڼqҼo5p5"" "*!yb! ~G*!N Kկ2 !*$ K*" x!*! @$@hK\K: K ~#~ w* NK* NK^#V#N#F!",!."* K6 *}ʴ}<ʴ.}o|g "($ Kt> =2(*f*(}DɯQ"(>QKQKQ>Q"%Q!2 *%DM* *ѵ+))  H~#+}#<: <ʲ<77: <ʢ2 ~77ø~7" 9:OG#Q{ozg#  "" BB     Ãà à Ãà  1 j$   | @ "H$ UUT$$ $I D$BA@! B$$A IA $!"   @$@$BI!! @ ""$D A   $I$ @ !  00 timemin: db 0 03DE 00 timehrs: db 0 03DF 00 timeday: db 0 03E0 00 timedat: db 0 03E1 00 timemon: db 0 03E2 00 db 0 ;thousandths of seconds, 4 bits only 03E3 00 timeyrs: db 0 03E4 00 timecnt: db 0 03E5 00 lstmnth: db 0 000A = numrtc equ $-time getdrv: 03E6 21EA03C9 lxi h,@dtbl ! ret 03EA 0A04000000@dtbl: dw dnull,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 040A 0000000000dnull: dw 0,0,0,0,0,0,0,0,0,@dircb,@dtacb,0 0422 00 db 0 seldsk: 0423 79326A00 mov a,c ! sta @adrv ; save drive select code 0427 210000 lxi h,@lptbl 042A 060009 mvi b,0 ! dad b ; create index from drive code 042D 7E mov a,m 042E FEFF cpi 255 jrz selerr 0430+286B DB 28H,SELERR-$-1 0432 326B00 sta @pdrv 0435 4F mov c,a 0436 43 mov b,e ;save login flag thru "search" routine 0437 CD9701 call search jrc selerr 043A+3861 DB 38H,SELERR-$-1 043C 326C00 sta @rdrv 043F 226D00 shld curmdl 0442 C5 push b ;save login bit 0443 110E00 lxi d,14 0446 19 dad d ;point to dphtbl 0447 5E mov e,m ;DE=dphtbl 0448 23 inx h 0449 56 mov d,m 044A 23 inx h 044B 4E mov c,m ;BC=modtbl 044C 23 inx h 044D 46 mov b,m 044E 3A6C00 lda @rdrv 0451 87 add a 0452 87 add a 0453 87 add a ;*8 0454 6F mov l,a 0455 2600 mvi h,0 0457 09 dad b ;select mode bytes 0458 226F00 shld @cmode ;set current mode pointer 045B C1 pop b ;get login bit back. bit 0,b ;test for initial select. 045C+CB40 DB 0CBH,0*8+B+40H jrnz notlgi 045E+2041 DB 20H,NOTLGI-$-1 0460 EB xchg ;DE=modes 0461 4F mov c,a 0462 0600 mvi b,0 0464 09 dad b ;+*8 0465 09 dad b ;+*16 0466 09 dad b ;+*24 0467 3A6C00 lda @rdrv 046A 4F mov c,a 046B 09 dad b ;+*1 = +*25 046C 227100 shld @dph 046F CDFC04 call setup$dph jrc selerr 0472+3829 DB 38H,SELERR-$-1 0474 AF xra a 0475 32FD05 sta @rcnfg 0478 3E03 mvi a,3 047A CD9305 call calmod ;call module's "login" routine. 047D B7 ora a ;see if an error occured. jrnz selerr 047E+201D DB 20H,SELERR-$-1 0480 3AFD05 lda @rcnfg 0483 B7 ora a 0484 C4FC04 cnz setup$dph jrc selerr 0487+3814 DB 38H,SELERR-$-1 0489 3A6A00 lda @adrv 048C 87 add a 048D 4F mov c,a 048E 0600 mvi b,0 0490 21EA03 lxi h,@dtbl 0493 09 dad b lded @dph 0494+ED5B DB 0EDH,5BH 0496+7100 DW @DPH 0498 73 mov m,e ;set current DPH in @dtbl 0499 23 inx h 049A 72 mov m,d jr selcom ;DE=dph 049B+1816 DB 18H,SELCOM-$-1 049D 210000 selerr: lxi h,0 04A0 C9 ret 04A1 3A6A00 notlgi: lda @adrv 04A4 87 add a 04A5 4F mov c,a 04A6 0600 mvi b,0 04A8 21EA03 lxi h,@dtbl 04AB 09 dad b 04AC 5E mov e,m ;get current DPH from @dtbl 04AD 23 inx h 04AE 56 mov d,m ;DE=dph sded @dph 04AF+ED53 DB 0EDH,53H 04B1+7100 DW @DPH 04B3 2A6F00 selcom: lhld @cmode 04B6 010000 lxi b,0 ; bit 7,m ;Tracks-per-side not valid for Hard disks. 04B9+CB7E DB 0CBH,7*8+M+40H jrnz selxit 04BB+2016 DB 20H,SELXIT-$-1 04BD 23 inx h ; ; bit 1,m ;unless its Z17... ; ; jrz sc0 ; ; mvi b,4 ;then side 1 has 4 less tracks (8 on DT) 04BE 3E28 sc0: mvi a,40 ;assume 5" ST 04C0 23 inx h bit 7,m ;check 5" drive 04C1+CB7E DB 0CBH,7*8+M+40H jrz sc1 04C3+2802 DB 28H,SC1-$-1 04C5 3E4D mvi a,77 ;8" drives have 77 tracks 04C7 4F sc1: mov c,a ;set side 0 tracks 04C8 90 sub b 04C9 47 mov b,a 04CA 23 inx h ;fix for HT bug bit 5,m ;check for DT 04CB+CB6E DB 0CBH,5*8+M+40H jrz selxit 04CD+2804 DB 28H,SELXIT-$-1 slar b ;multiply # of tracks by 2 if DT 04CF+CB20 DB 0CBH,20H+B slar c ; 04D1+CB21 DB 0CBH,20H+C selxit: sbcd @tps 04D3+ED43 DB 0EDH,43H 04D5+FB05 DW @TPS lded @dph 04D7+ED5B DB 0EDH,5BH 04D9+7100 DW @DPH 04DB 210C00 lxi h,+12 04DE 19 dad d ;point to DPB entry 04DF 4E mov c,m 04E0 23 inx h 04E1 46 mov b,m 04E2 C5 push b ;save DPB 04E3 0A ldax b ;sectors-per-track, byte value 04E4 210F00 lxi h,+15 04E7 09 dad b 04E8 46 mov b,m ;psh 04E9 04 inr b 04EA 05 gh2: dcr b 04EB CAF204 jz gh3 srlr a 04EE+CB3F DB 0CBH,38H+A jr gh2 04F0+18F8 DB 18H,GH2-$-1 04F2 32FA05 gh3: sta @pspt ;physical sectors per track 04F5 EB xchg ;put DPH in (HL) for BDOS 04F6 5E mov e,m 04F7 23 inx h 04F8 56 mov d,m ;DE=sectrn 04F9 2B dcx h 04FA C1 pop b ;BC=dpb 04FB C9 ret setup$dph: 04FC B7 ora a ;reset [CY] 04FD 2A6F00 lhld @cmode ;HL=modes bit 7,m ;check for hard-disk drive (modes not standard) 0500+CB7E DB 0CBH,7*8+M+40H 0502 C0 rnz 0503 CD0000 call ?getdp 0506 37 stc 0507 C0 rnz 0508 2A7100 lhld @dph ;restore dph 050B 71 mov m,c ;set XLAT table 050C 23 inx h 050D 70 mov m,b 050E 010B00 lxi b,12-1 0511 09 dad b ;point to dpb 0512 4E mov c,m ;get DPB addr 0513 23 inx h 0514 66 mov h,m ;(HL=dpb) 0515 69 mov l,c 0516 EB xchg 0517 011100 lxi b,17 ldir 051A+EDB0 DB 0EDH,0B0H 051C B7 ora a ;reset [CY] 051D C9 ret ; Allocate space from hash pool. ; Does nothing if space exhausted (caller must init for "no hash") ; BC = size of hash, DE = &DPH.HASH ; Preserves BC, A ?halloc: 051E 2A0400 lhld hleft 0521 B7 ora a dsbc b 0522+ED42 DB 0EDH,B*8+42H 0524 D8 rc ; no space 0525 220400 shld hleft 0528 2A0200 lhld hlast 052B EB xchg 052C 73 mov m,e 052D 23 inx h 052E 72 mov m,d 052F 23 inx h 0530 3602 mvi m,hbnk 0532 EB xchg 0533 09 dad b 0534 220200 shld hlast 0537 C9 ret 0538 010000 home: lxi b,0 ; same as set track zero settrk: sbcd trk 053B+ED43 DB 0EDH,43H 053D+FE05 DW TRK 053F C9 ret setsec: sbcd sect 0540+ED43 DB 0EDH,43H 0542+0006 DW SECT 0544 C9 ret setdma: sbcd @dma 0545+ED43 DB 0EDH,43H 0547+7300 DW @DMA 0549 3A4103 lda @cbnk ; default DMA bank is current bank 054C 32F905 setbnk: sta @dbnk 054F C9 ret 0550 6960 sectrn: mov l,c ! mov h,b 0552 7AB3C8 mov a,d ! ora e ! rz 0555 EB096E2600 xchg ! dad b ! mov l,m ! mvi h,0 055A 2B dcx h ;sectors numbered 0 - (n-1) 055B C9 ret 055C 1E06 read: mvi e,6 ;read entry is +6 055E C36305 jmp rw$common ; use common code 0561 1E09 write: mvi e,9 ;write entry is +9 rw$common: ;do any track/sector/side conversion... 0563 AF xra a 0564 32F305 sta @side 0567 2AFE05 lhld trk 056A 22F405 shld @trk 056D 2A0006 lhld sect 0570 22F605 shld @sect 0573 2A6F00 lhld @cmode bit 7,m ;floppy or hard-disk? 0576+CB7E DB 0CBH,7*8+M+40H jrnz rw0 0578+2018 DB 20H,RW0-$-1 057A 23 inx h 057B 23 inx h 057C 23 inx h bit 6,m ;DS 057D+CB76 DB 0CBH,6*8+M+40H jrz rw0 057F+2811 DB 28H,RW0-$-1 0581 7E mov a,m 0582 E60E ani 01110b ;DSALG 0584 219905 lxi h,dstbl 0587 4F mov c,a 0588 0600 mvi b,0 058A 09 dad b 058B 4E mov c,m 058C 23 inx h 058D 66 mov h,m 058E 69 mov l,c 058F CDFA02 call icall 0592 7B rw0: mov a,e 0593 2A6D00 calmod: lhld curmdl 0596 C3F402 jmp addjmp ; leap to driver ;; 0 1 2 3 4 5 6 7 0599 D605BE05B8dstbl: dw wrap,alt1,cont1,cont2,alt2,dsret,dsret,dsret 05A9 3AFA05 cont2: lda @pspt ;as done by Gnat srlr a ;SPT must be EVEN 05AC+CB3F DB 0CBH,38H+A 05AE 4F mov c,a 05AF 21F605 lxi h,@sect 05B2 7E mov a,m 05B3 91 sub c ;don't change the sector number on side 1 05B4 D8 rc 05B5 4F mov c,a ;save for cont1 jr side1 05B6+182F DB 18H,SIDE1-$-1 05B8 CDA905 cont1: call cont2 05BB D8 rc 05BC 71 mov m,c 05BD C9 ret ;side1 already set 05BE 21F405 alt1: lxi h,@trk rarr m 05C1+CB1E DB 0CBH,18H+M 05C3 3E00 mvi a,0 05C5 17 ral jr sside 05C6+1821 DB 18H,SSIDE-$-1 05C8 CDBE05 alt2: call alt1 ;Kaypro 05CB B7 ora a ;side 0? 05CC C8 rz ;yes, done. 05CD 21F605 lxi h,@sect ;for KAYPRO, sectors on side 1 05D0 3AFA05 lda @pspt ;are numbered PSPT+1 to PSPT*2. 05D3 86 add m ; 05D4 77 mov m,a 05D5 C9 ret wrap: lbcd @tps ;B=tracks on side 1, C=tracks on side 0 05D6+ED4B DB 0EDH,4BH 05D8+FB05 DW @TPS 05DA 3AF405 lda @trk ;(for all except Z17, B=C) 05DD B9 cmp c 05DE D8 rc neg 05DF+ED44 DB 0EDH,44H 05E1 81 add c 05E2 80 add b 05E3 3D dcr a 05E4 32F405 sta @trk 05E7 3E01 side1: mvi a,1 05E9 32F305 sside: sta @side 05EC C9 dsret: ret 05ED 32F805C9 multio: sta @cnt ! ret 05F1 AFC9 flush: xra a ! ret ; return with no error 05F3 @side: ds 1 ; current side of media (floppy only) 05F4 @trk: ds 2 ; current track number 05F6 @sect: ds 2 ; current sector number 05F8 00 @cnt: db 0 ; record count for multisector transfer 05F9 00 @dbnk: db 0 ; bank for disk DMA operations 05FA @pspt: ds 1 05FB @tps: ds 2 05FD @rcnfg: ds 1 05FE trk: ds 2 0600 sect: ds 2 0602 4206 @dtacb: dw dtacb1 0604 0606 @dircb: dw dircb1 0606 FF dircb1: db 0ffh ;drive 0607 0000000000 db 0,0,0,0,0 060C 0000000000 dw 0,0,2100h ;directly after CCP image (max 8K CCP) 0612 00 db 0 0613 1506 dw dircb2 0615 FF dircb2: db 0ffh ;drive 0616 0000000000 db 0,0,0,0,0 061B 0000000000 dw 0,0,2500h 0621 00 db 0 0622 2406 dw dircb3 0624 FF dircb3: db 0ffh ;drive 0625 0000000000 db 0,0,0,0,0 062A 0000000000 dw 0,0,2900h 0630 00 db 0 0631 3306 dw dircb4 0633 FF dircb4: db 0ffh ;drive 0634 0000000000 db 0,0,0,0,0 0639 0000000000 dw 0,0,2d00h ;dir buffers: 2100-3100 063F 00 db 0 0640 0000 dw 0000 ;end of DIR buffers 0642 FF dtacb1: db 0ffh ;drive 0643 0000000000 db 0,0,0,0,0 0648 0000000000 dw 0,0,3100h 064E 00 db 0 064F 5106 dw dtacb2 0651 FF dtacb2: db 0ffh ;drive 0652 0000000000 db 0,0,0,0,0 0657 0000000000 dw 0,0,3500h 065D 00 db 0 065E 6006 dw dtacb3 0660 FF dtacb3: db 0ffh ;drive 0661 0000000000 db 0,0,0,0,0 0666 0000000000 dw 0,0,3900h 066C 00 db 0 066D 6F06 dw dtacb4 066F FF dtacb4: db 0ffh ;drive 0670 0000000000 db 0,0,0,0,0 0675 0000000000 dw 0,0,3d00h ;data buffers: 3100-4100 067B 00 db 0 067C 0000 dw 0000 ;end of data buffers 067E 0041 @scrbf dw 4100h ;scratch buffer 4100-4500 ; Max. system space: 4500h to "bnktop", 38K if 8K common. 0680 end  ; Max. system space: 4500h to "bnktop", 38K if 8K common. 0685 end  0360+2001 DB 20H,TI16-$-1 0362 05 dcr b 0363 78 ti16: mov a,b 0364 87 add a 0365 80 add b ;*3 0366 87 add a 0367 80 add b ;*7 bit 7,c 0368+CB79 DB 0CBH,7*8+C+40H jrz ti17 036A+2802 DB 28H,TI17-$-1 neg 036C+ED44 DB 0EDH,44H 036E 47 ti17: mov b,a 036F 79 mov a,c 0370 90 sub b 0371 3C inr a 0372 32DF03 sta timeday 0375 3E12 mvi a,clrcnt ; 0377 D320 out rtcadr ; 0379 3E03 mvi a,00000011b ;reset fractional seconds 037B D324 out rtcdta ;we now have one second to set time 037D 160A mvi d,numrtc 037F 21DC03 lxi h,time 0382 012002 02F4 ADDJMP 05BE ALT1 05C8 ALT2 0258 AUXIN 022F AUXIST 0297 AUXOST 0272 AUXOUT 03BE BB0 0000 BC 03A8 BCDBIN 0005 BDOS 008F BDOSE 0007 BELL 03B6 BINBCD 0000 BIOS0 FC00 BNKDOS 02FB BNKSEL 0038 BNKSIZ E000 BNKTOP 0006 BOOT 0593 CALMOD 0100 CCP 037A CCPCOM 036F CCPMSG 0379 CCPRECS 01F4 CDTBL 0217 CINIT 023E CISNEXT 0012 CLRCNT 00C2 CLRPIO 0204 CNULL 00E0 COMPAG 0282 CONEXT 0253 CONIN 0292 CONOST 026D CONOUT 022A CONST 05B8 CONT1 05A9 CONT2 02A7 COSNEXT 0000 CPM 000D CR 006D CURMDL 0002 DE 0078 DEFSRC 01AF DEVTBL 0606 DIRCB1 0615 DIRCB2 0624 DIRCB3 0633 DIRCB4 040A DNULL 05EC DSRET 0599 DSTBL 0642 DTACB1 0651 DTACB2 0660 DTACB3 066F DTACB4 01F0 ERRX 0000 FALSE 039A FCBNR 0010 FDC 05F1 FLUSH 03E6 GETDRV 01F7 GETT 04EA GH2 04F2 GH3 0087 GOCCP 0002 HBNK 0004 HL 0002 HLAST 0004 HLEFT 0538 HOME 0DF0 HSIZE 0100 HSTART 0081 IAIVEC 0083 IAOVEC 02FA ICALL 007D ICIVEC 007F ICOVEC 0085 ILOVEC 0066 IN0 0086 IN1 00AF IN2 0094 IN3 00B3 IN4 00C9 IN5 02EA INDJMP 02E0 INDJMP1 00C7 INITDONE 025E INSCAN 025B INSCAN0 0143 INTSTK 012E IOSTK 012E IOSTKP 024A IS0 0143 ISTK 0239 ISTSCAN 0232 ISTSCAN0 0004 IX 0004 IY 000A LASTMON 000A LF 0277 LIST 029C LISTST 03E5 LSTMNTH 003F MMU 03D0 MONDAYS 0329 MOVE 004B MOVEV 05ED MULTIO 01ED NOCCP 00BA NOTCHR 04A1 NOTLGI 0216 NULL 0213 NULLI 0130 NULLPIO 0130 NULLSIO 000A NUMRTC 0002 NUMTIC 02A2 OSTSCAN 029F OSTSCAN0 027D OUTSCAN 027A OUTSCAN0 0020 PIO 0022 PIOACTL 0020 PIOADAT 0023 PIOBCTL 0021 PIOBDAT 00C0 PIOVEC 055C READ FD00 RESDOS 0024 RTC 0020 RTCADR 0006 RTCDAT 0005 RTCDAY 0024 RTCDTA 0009 RTCENT 0004 RTCHRS 0011 RTCIC 0010 RTCIS 0003 RTCMIN 0007 RTCMON 0002 RTCSEC 0014 RTCSTS 0008 RTCYRS 0592 RW0 0563 RWCOMMON 031C SAVEDE 04BE SC0 04C7 SC1 0197 SEARCH 0600 SECT 0550 SECTRN 04B3 SELCOM 0423 SELDSK 049D SELERR 04D3 SELXIT 054C SETBNK 0545 SETDMA 017C SETJUMPS 0540 SETSEC 028D SETT 053B SETTRK 04FC SETUPDPH 0390 SETYEAR1 05E7 SIDE1 0342 SIGNON 0004 SIO1 0006 SIO1CTLA 0007 SIO1CTLB 0004 SIO1DATA 0005 SIO1DATB 00A0 SIO1VEC 000C SIO2 000E SIO2CTLA 000F SIO2CTLB 000C SIO2DATA 000D SIO2DATB 00B0 SIO2VEC 019A SNEXT 007C SRCTYP 05E9 SSIDE 010E STACK 02DD SW0 02C9 SWTOSYS 03A1 SY0 0014 SYSCTL 03A6 THREAD 01FB TI0 0204 TI1 02F9 TI10 031E TI11 0321 TI12 032A TI13 0355 TI14 0357 TI15 0363 TI16 036E TI17 0385 TI18 0247 TI1@0 025B TI2 0261 TI3 0286 TI4 027C TI5 02AC TI6 02B4 TI7 02C6 TI8 02D5 TI8@0 02E8 TI9 0145 TICK 039E TICTBL 03DC TIME 03E4 TIMECNT 03E0 TIMEDAT 03DF TIMEDAY 03DE TIMEHRS 03DD TIMEMIN 03E1 TIMEMON 03DC TIMESEC 0309 TIMEX 03E3 TIMEYRS 0077 TMPDRV 01CD TO0 01C7 TO1 01E3 TO2 017C TO3 0158 TO4 0178 TO5 0181 TOO3 05FE TRK FFFF TRUE 00C5 TWICE 6231 VERS 00C4 WBOOT 0152 WBOOT1 0075 WBTRAP 05D6 WRAP 0561 WRITE 02BA XITUSR 0328 XMBNK 0166 XMOVCCP 031E XMOVE 02C6 XU0 0331 XXM0 0051 ?BNKSL 0042 ?DRTBL 003C ?DVTBL 0000 ?GETDP 051E ?HALLOC 0000 ?SERDP 0054 ?STBNK 01C6 ?TIMOT 006A @ADRV 0000 @AIVEC 0000 @AOVEC 0341 @CBNK 0000 @CIVEC 006F @CMODE 05F8 @CNT 0000 @COVEC 01B3 @CTBL 0000 @DATE 05F9 @DBNK 0604 @DIRCB 0073 @DMA 0071 @DPH 0063 @DSTAT 0602 @DTAC1 CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321TEMPORARY~ORDER~PAGE~DISPLAY~NO~COM~SUB~NOPAGE~NODISPLAY~ON~OFF  $(/9!6 #6 #6 #6 #6 ! "+~2*& "*& ~[”*#" â' :¢ V    v!q*&  !p+q*     !q:2!6 1 !s+q:2!6*& "1 !q!6*&  -> *&  :A:!4!r+s+p+q+p+q!6 *~ ʯ*~2*M2!6: ¦:ڙé*M2Äùe:2#:22*~2!6 *~2*~ ?*N ! ** =2!3!6!6:!0:)!46*6 #*:w:+s#r: i*#"n!6:2O * ~2*& *:ʿ!4*:w*& *:®*& *~2À*6 *~2o:2!6*#~2!4N * :!6 *& *:!6 !4N * ~2*& *~2*M2:> !Hl!4N * ~2*M2;:2#+s#r*N2!š*#" ͯ ͯ!q!6 *""2:(!6(*& *& !s*& !s::H*+":++s#r͛!6:!D*"*M!4&*M:[Ϳa2Ϳ:Al͛*M ! ^#VIͿiͿ{ͿͿͿͿͿͿ Ϳ|͛   !q!6:! *Nͯ*#"!4͛!6:!R *? !6^ͯD  ͯ*#"!4 ͛L2M2N2O2P2,22:2:2:W ͛Ϳ!6 *&  ~:HW :1Oͯ*M ! ^#V1Ϳ 4Ϳ 7Ϳ :Ϳ =Ϳ*&  ~ 8 RͿM *&  >@Oͯ:ͯ͛!4ø :Ҙ ͛ZͿ*M ! ^#VrͿØ vͿØ ͿØ w : ͛Ϳ>!Ҷ !6 : Ϳ :@Oͯ:ͯ: ͛Ϳ: Ϳ Ϳ:# ͛Ϳ:  Ϳ# Ϳ͛!6!6 !6 !6 >!V *&  6!4; !6 :: H I>!Ҏ  ͦ: › ͦ!6 >! *&  :=¿ ͦ!4  :=*&  w!4[ !6 >! :L*&  ^O!4 :: Hұ!6 !6I*M ! ^#Vͦî!6:] ͦI: w ͦ:=_Pî!6!6 #6 :ʞ ͦ*~ ~ Hҿ *#"Þ *~( !6*#"I::H ͦ: !6:2: :/H!0 ͦ: !҇ I::Hj ͦ:2:!҇ ͦ2: ¢ :2ê :2: ½ :2 :2*: : ͦ *#" : ͦ*~]~ H!6 î!6!6 :WI: W: R!6Wͦ*,*-î!6!6:¨I: ʨ: £!6 èͦ2::2:2*îI::H ͦ:!6,-<!62:2*îͦîͦî!6,-î!62:2*îͦîͦîC K l?GOe !p+q*~ ~ H*#"ø*~ > >_ ogDM! >))덑o|g =o& og  ~aracters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename B 03EA @DTBL 0000 @ERMDE 0000 @HOUR 0000 @LOGIN 0000 @LOVEC 0000 @LPTBL 0000 @MIN 0000 @MXTPA 006B @PDRV 05FA @PSPT 05FD @RCNFG 006C @RDRV 067E @SCRBF 0000 @SEC 05F6 @SECT 05F3 @SIDE 05FB @TPS 05F4 @TRK 00A0 @VECT 216 NULL 0213 NULLI 0130 NULLPIO 0130 NULLSIO 000A NUMRTC 0002 NUMTIC 02A2 OSTSCAN 029F OSTSCAN0 027D OUTSCAN 027A OUTSCAN0 0020 PIO 0022 PIOACTL 0020 PIOADAT 0023 PIOBCTL 0021 PIOBDAT 00C0 PIOVEC 055C READ FD00 RESDOS 0024 RTC 0020 RTCADR 0006 RTCDAT add a 0453 87 add a ;*8 0454 6F mov l,a 0455 2600 mvi h,0 0457 09 dad b ;select mode bytes 0458 226F00 shld @cmode ;set current mode pointer 045B C1 pop b ;get login bit back. bit 0,b ;test for initial select. 045C+CB40 DB 0CBH,0*8+B+40H jrnz notlgi 045E+2041 DB 20H,NOTLGI-$-1 0460 EB xchg ;DE=modes 0461 4F mov c,a 0462 0600 mvi b,0 0464 09 dad b ;+*8 04vers equ '1b' ; March 11, 2017 21:34 drm "MBIOS3KP.ASM" ;**************************************************************** ; Main BIOS module for CP/M 3 (CP/M plus) on the KAYPRO computer* ; Copyright (c) 1985 Douglas Miller * ;**************************************************************** maclib Z80 true equ -1 false equ not true bnksiz equ 56 ;size of banks, in "K". Either 48 or 56. compag equ bnksiz*4 ; C0 or E0, for MMU common page select bnktop equ compag shl 8 ;C000 or E000 cr equ 13 lf equ 10 bell equ 7 cpm equ 0 bdos equ 5 ccp equ 0100h ; Console Command Processor gets loaded into the TPA ; SCB registers extrn @covec,@civec,@aovec,@aivec,@lovec,@ermde extrn @mxtpa,@sec,@min,@hour,@date extrn @lptbl ; External routines extrn ?getdp,?serdp ; Variables for use by other modules public @adrv,@pdrv,@rdrv,@side,@trk,@sect,@login public @dma,@dbnk,@cnt,@scrbf,@dtacb,@dircb public @dstat,@cmode,@dph,@rcnfg public @ctbl,@cbnk,bnkdos,resdos,wbtrap public @vect,sio1vec,sio2vec,piovec ; Routines for use by other modules public ?timot public ?dvtbl,?drtbl public ?bnksl,?stbnk public ?halloc ********************************************************* ** I/O port base addresses ********************************************************* sio1 equ 004h ;z80-sio/0 sio2 equ 00ch ; " pio equ 020h ;modem and rtc functions rtc equ 024h ;real-time clock fdc equ 010h ;floppy disk controller mmu equ 03fh ;memory management sysctl equ 014h ;system control (and floppy disk control bits) ********************************************************* ** SIO's ********************************************************* sio1datA equ sio1+0 sio1ctlA equ sio1datA+2 sio1datB equ sio1+1 sio1ctlB equ sio1datB+2 sio2datA equ sio2+0 sio2ctlA equ sio2datA+2 sio2datB equ sio2+1 sio2ctlB equ sio2datB+2 ********************************************************* ** PIO ********************************************************* pioAdat equ pio+0 pioActl equ pioAdat+2 pioBdat equ pio+1 pioBctl equ pioBdat+2 ********************************************************* ** RTC (MM58167 Real-Time Clock) ********************************************************* RTCDTA equ RTC RTCADR equ pioAdat RTCSEC equ 2 RTCMIN equ 3 RTCHRS equ 4 RTCDAY equ 5 RTCDAT equ 6 RTCMON equ 7 lastmon equ 10 ;month last accessed (used to detect year change) rtcyrs equ 8 ;years (decade) rtcent equ 9 ;century clrcnt equ 18 rtcsts equ 20 rtcis equ 16 ;interupt status rtcic equ 17 ;interupt control hbnk equ 2 ;bank to use for Hash tables. hstart equ 100h ;reserve page 0 for interupt vectors, etc. hsize equ (bnktop-hstart)/16 ;allocate space equally to each drive. ;-------- Start of Code-producing source ----------- cseg ; GENCPM puts CSEG stuff in common memory BIOS$0 equ $ bnkdos equ bios$0+0fc00h ;dummy values, reloc "Fxxx", GENCPM will resdos equ bios$0+0fd00h ; substitiute real values. jmp boot ; initial entry on cold start jmp wboot ; reentry on program exit, warm start jmp const ; return console input status jmp conin ; return console input character jmp conout ; send console output character jmp list ; send list output character jmp auxout ; send auxilliary output character jmp auxin ; return auxilliary input character jmp home ; set disks to logical home jmp seldsk ; select disk drive, return disk parameter info jmp settrk ; set disk track jmp setsec ; set disk sector jmp setdma ; set disk I/O memory address jmp read ; read physical block(s) jmp write ; write physical block(s) jmp listst ; return list device status jmp sectrn ; translate logical to physical sector jmp conost ; return console output status jmp auxist ; return aux input status jmp auxost ; return aux output status ?dvtbl: jmp devtbl ; return address of device def table jmp cinit ; change baud rate of device ?drtbl: jmp getdrv ; return address of disk drive table jmp multio ; set multiple record count for disk I/O jmp flush ; flush BIOS maintained disk caching movev: jmp move ; block move memory to memory jmp timex ; Signal Time and Date operation ?bnksl: jmp bnksel ; select bank for code execution and default DMA ?stbnk: jmp setbnk ; select different bank for disk I/O DMA operations. jmp xmove ; set source and destination banks for one operation jmp search ; reserved for OEM: search for module. jmp 0 ; reserved for future expansion jmp 0 ; reserved for future expansion @dstat: ds 1 dw @lptbl ;logical/physical drive table dw thread ;module thread dw ?serdp ;test mode validity, HL=memory address of ?serdp @adrv: ds 1 ; currently selected disk drive @pdrv: ds 1 ; physical drive number @rdrv: ds 1 ; module relative disk drive number curmdl: ds 2 ; currently selected Disk I/O module address @cmode: ds 2 @dph: ds 2 @dma: dw 0 wbtrap: dw 0 tmpdrv: db 0 defsrc: db 0,0ffh,0ffh,0ffh srctyp: db 000$00$000b ;only bits 3,4 are used (others ignored) icivec: dw 0100000000000000b icovec: dw 1000000000000000b iaivec: dw 0000000000000000b iaovec: dw 0000000000000000b ilovec: dw 0000001000000000b goccp: mvi a,1 ;select bank 1 (where CCP is) call bnksel jmp ccp ; then exit to ccp bdose: lhld @mxtpa call icall xra a call bnksel mov a,l mov b,h ret @@ set ($-BIOS$0) if (@@ and 0fh) ne 0 ds 16-(@@ and 0fh) endif ;put vectors on req. boundary, xxxxx000x for SIOs ; and xxxxxxx0 for PIO. @vect: sio1vec: dw nullsio ; chB TxE dw nullsio ; Ext/Sts dw nullsio ; RxA dw nullsio ; Spcl dw nullsio ; chA TxE dw nullsio ; Ext/Sts dw nullsio ; RxA dw nullsio ; Spcl sio2vec: dw nullsio ; chB TxE dw nullsio ; Ext/Sts dw nullsio ; RxA dw nullsio ; Spcl dw nullsio ; chA TxE dw nullsio ; Ext/Sts dw nullsio ; RxA dw nullsio ; Spcl piovec: dw nullpio ;ch A dw nullpio ;ch B @v set @vect-BIOS$0 @@ set $-BIOS$0 if (@v shr 8) ne (@@ shr 8) ds 'Vect X page bound' endif wboot: lxi sp,stack xra a call bnksel jmp wboot1 ds 64 stack equ $ ds 32 iostk equ $ iostkp: dw $-$ nullsio: nullpio: ei reti ds 16 ;8 levels of stack intstk: ds 0 istk: dw 0 tick: sspd istk lxi sp,intstk push psw push h push b lxi h,@sec inr m lxi h,tictbl mvi b,numtic to4: mov a,m inx h cpi true jz to3 mov a,m ora a jrz to5 dcr m jrnz to3 push b push d push h inx h mov a,m inx h mov h,m mov l,a call icall pop h pop d pop b mov a,m ora a jrnz to3 to5: dcx h mvi m,true inx h to3: inx h inx h inx h djnz to4 too3: mvi c,rtcadr inp b ;save existing rtcadr mvi a,rtcis ;clear rtc INT flag outp a ; in rtcdta ; outp b ;restore rtcadr pop b pop h pop psw lspd istk ei reti ;resets PIO interupt ; SEARCH for a module by device #. ; entry: C = device # (0-249) ; exit: [CY] = not found ; else HL=module address ("init" entry) ; A=device number (relative to module's #0) ; search: lxi d,thread ;C=device number snext: xchg mov e,m inx h mov d,m inx h mov a,d ora e sui 1 ;produce [CY] if DE=0000 rc ;return if device not found, DE=0000 mov a,c sub m jrc snext inx h cmp m jrnc snext inx h ;point to "init" vector ora a ;set [NC] condition ret devtbl: lxi h,@ctbl ret @ctbl: db 'nodev ',0,0 ;character table, filled at cold-start. db 'nodev ',0,0 db 'nodev ',0,0 db 'nodev ',0,0 db 'nodev ',0,0 db 'nodev ',0,0 db 'nodev ',0,0 db 'nodev ',0,0 db 0 ;table terminator cdtbl: rept 8 ;character device table, filled at cold-start. dw cnull endm cnull: jmp null ;init jmp nulli ;input status jmp nulli ;input jmp nulli ;output status jmp null ;output nulli: mvi a,1ah ;E.O.F. character, also [NZ] to be always ready. ora a ;sets [NZ] condition. null: ret cinit: mvi b,0 ;C=device number (0-11) bit 3,c ;devices 8-11? rnz ;cannot init those mvi b,0 ;C=device number (0-7) slar c ;*2 for table index lxi h,cdtbl dad b mov e,m inx h mov d,m mov b,c xchg pchl ;jump to modules "init" with B=device # const: lhld @civec ; get console input bit vector jr ist$scan0 auxist: lhld @aivec ; get aux input bit vector ist$scan0: call swtosys lxi d,xitusr push d ist$scan: lxi d,cdtbl mvi b,0 cis$next: slar h ; check next bit jnc is0 mvi a,3 ; assume device not ready call indjmp1 ; check status for this device ora a ! rnz ; if any ready, return true is0: inx d inx d inr b mov a,h ! ora a ; see if any more selected devices jrnz cis$next xra a ; all selected were not ready, return false ret conin: lhld @civec jr in$scan0 auxin: lhld @aivec in$scan0: call swtosys in$scan: push h call ist$scan ;see if there is a character ready pop h ora a jrz in$scan ;wait untill one is ready. mvi a,6 call indjmp ;get character jr xitusr conout: lhld @covec ; fetch console output bit vector jr out$scan0 auxout: lhld @aovec ; fetch aux output bit vector jr out$scan0 list: lhld @lovec ; fetch list output bit vector out$scan0: call swtosys out$scan: lxi d,cdtbl mvi b,0 co$next: slar h ; shift out next bit mvi a,12 cc indjmp1 inx d inx d inr b mov a,h ! ora a ; see if any devices left jrnz co$next ; and go find them... jr xitusr conost: lhld @covec ; get console output bit vector jr ost$scan0 auxost: lhld @aovec ; get aux output bit vector jr ost$scan0 listst: lhld @lovec ; get list output bit vector ost$scan0: call swtosys ost$scan: lxi d,cdtbl mvi b,0 ;B = device number cos$next: slar h ; check next bit mvi a,9 ; [NZ] will assume device ready (in case no call made) cc indjmp1 ; check status for this device ora a ; see if device ready jrz xitusr ; if any not ready, return false inx d inx d inr b mov a,h ! ora a ; see if any more selected devices jrnz cos$next ori true ; if all selected were ready, return true ; jr xitusr xitusr: mov b,a pop psw ora a jrz xu0 call bnksel ;preserves BC. lspd iostkp xu0: mov a,b ora a ret swtosys: pop d ;routine return address lda @cbnk ora a jrz sw0 sspd iostkp lxi sp,iostk push psw xra a call bnksel pop psw sw0: push psw push d ret indjmp1: push h push d push b call indjmp pop b pop d pop h ret indjmp: xchg add m ;a=0,3,6,9,12,... mov e,a mvi a,0 inx h adc m mov d,a xchg pchl ;indirect call addjmp: add l ;a=0,3,6,9,... mov l,a mvi a,0 adc h mov h,a icall: pchl ;indirect call bnksel: sta @cbnk ; remember current bank push b mov b,a add a add a ora b ori compag out mmu pop b ret timex: ;time get/set. sded savede call swtosys ;destroys DE push h call gett pop h lded savede jmp xitusr savede: ds 2 xmove: mov a,b ;WR bnk add a add a ora c ;RD bnk ori compag sta xmbnk ret xmbnk: ds 1 move: lda xmbnk ora a jrz xxm0 out mmu xxm0: xchg ldir xchg ora a ;test xmbnk again lda @cbnk cnz bnksel xra a sta xmbnk ret @cbnk: db 0 ; bank for processor operations signon: db 13,10,7,'KAYPRO CP/M 3.10' dw vers db ' (c) 1985 DRI and DRM',13,10,'$' ccp$msg db 13,10,7,'No CCP$' ccprecs db 0 ccp$com db 1,'CCP COM',0,0,0,0 ds 16 fcb$nr db 0,0,0,0 tictbl: db true,0 dw $-$ db true,0 dw $-$ numtic equ ($-tictbl)/4 ;must be at end of all "cseg" code. thread equ $ dseg ; this part can be banked @login: ds 2 ;position is assumed by special BNKBDOS3.SPR... ; must be first item in DSEG. hlast: dw hstart hleft: dw bnktop-hstart boot: lxi sp,stack lxi h,@vect mov a,h stai im2 ; Verify that we have banked RAM... ; init PIO,RTC and tick interupt call clrpio ;reset any PIO interupts pending mvi a,11$001111b ;bit control mode out pioActl mvi a,11000000b ;7,6 inputs out pioActl lxi h,piovec+0 ;bit-0 of vector must be 0 mov a,l out pioActl mvi a,1011$0111b ;EI, OR, HI, mask follows out pioActl ; mvi a,10111111b ;bit 6 only out pioActl lxi h,tick shld piovec+0 mvi a,rtcis out rtcadr in rtcdta mvi a,rtcic out rtcadr mvi a,00000100b ;enable INT on 1-second interval out rtcdta ; mvi a,01$001111b ;input mode out pioBctl mvi a,0000$0111b ;no interupts out pioBctl mvi a,01001010b out pioBdat lxi h,piovec+2 mov a,l out pioBctl ; mvi a,2 out sio1ctlB out sio2ctlB lxi h,sio1vec mov a,l out sio1ctlB lxi h,sio2vec mov a,l out sio2ctlB ei ; Initialize all modules and build tables. lxi h,thread ;thread our way through the modules, in0: mov e,m ;initializing as we go. inx h mov d,m ;next module, or "0000" if we're past the end. inx h mov a,d ora e jz init$done mov a,m ;device base number inx h inx h ;thread+4 = init entry (JMP) sui 200 ;if Char I/O module, build entry(s) in tables. jc notchr push d ;save NEXT module address mov c,a mvi b,0 dcx h mov a,m ;number of devices inx h xchg ;DE=init entry point lxi h,cdtbl dad b dad b mov b,a mov a,c in1: cpi 12 jnc in4 ;if device # overflows, adjust next step. mov m,e ; inx h ; mov m,d ; inx h ; inr a djnz in1 dcx d ldax d ;number of devices in3: mov b,a mov a,c ;DE=module address, C=device base add a ; *2 add a ; *4 add a ; *8 mov c,a mov a,b ;number of devices mvi b,0 lxi h,@ctbl dad b xchg ;DE=@ctbl indexed by device base mvi c,17+1 ;B=0 still, point to CHRTBL vector dad b ;point to chrtbl location mov c,m inx h mov h,m mov l,c ;HL=chrtbl add a add a add a ;num.dev * 8 = number of bytes in module's table. mov c,a ;B=0 still ldir ;copy modules chrtbl into system table. in2: pop h jmp in0 in4: sub c ;compute number of devices that will fit. jnz in3 ;continue with initialization of tables jmp in2 notchr: ;HL point to init entry push d call icall ;"call" (HL) pop h jmp in0 clrpio: call twice twice: reti init$done: ;all Disk I/O modules are initialized. mvi c,11 in5: push b call cinit pop b dcr c jp in5 lhld icovec shld @covec ;set console I/O lhld icivec shld @civec ; lhld ilovec shld @lovec ;set list output device lhld iaovec shld @aovec ;set auxiliary I/O device lhld iaivec shld @aivec ; lxi h,defsrc lxi d,@ermde+1 ;location of default search chain in SCB lxi b,5 ldir lda srctyp ani 000$11$000b mov c,a lda @civec-10 ;location of search type flags in CCP section ani 111$00$111b ora c sta @civec-10 lxi d,signon mvi c,9 call bdose ; was there enough RAM? call set$jumps ;setup system jumps and put in all banks ; fetch CCP for first time, system will put it in bank 1. mvi a,0feh ;don't try warm boot on error... sta @ermde ; lxi d,ccp$com mvi c,15 ;open file call bdose inr a jz noccp xra a sta fcb$nr lxi d,ccp mvi c,26 ;set DMA address call bdose mvi e,64 ;read upto 64 records (8K) mvi c,44 ;set multi-sector count call bdose lxi d,ccp$com mvi c,20 ;read record(s) call bdose mov a,h ;H=number of records actually read sta ccprecs xra a ;back to sta @ermde ;default mode for user lxi b,0001h ; save CCP in bank 0 for warm boots. call xmovccp ;NOTE: this restricts banked OS size. jmp goccp ; (allowing 8K for "CCP" and reserving page 0) wboot1: call set$jumps ; initialize page zero, selects bank 0 lxi b,0100h call xmovccp lhld wbtrap ; allow I/O modules to partake in the warm$boot. mov a,h ; ora l ; cnz icall ; jmp goccp xmovccp: call xmove lda ccprecs mov b,a mvi c,0 srlr b rarr c ;BC=number of bytes in CCP lxi h,ccp lxi d,ccp jmp move set$jumps: mvi a,(JMP) sta cpm ! sta bdos ; set up jumps in page zero lxi h,BIOS$0+3 ! shld cpm+1 ; BIOS warm start entry lhld @mxtpa ! shld bdos+1 ; BDOS system call entry lxi b,0100h ;source bank 0, dest bank 1 call xmove lxi h,0 lxi d,0 lxi b,64 call move lxi b,0200h ;source bank 0, dest bank 2 call xmove lxi h,0 lxi d,0 lxi b,64 call move lxi b,0300h ;source bank 0, dest bankÀ CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH251082 654321! 9"k1G \ !m!w# š!v6H#6E#6X!e 6C#6O#6M <  <&: g. ".g"?S:2n!`w #4o"c*e{ozg"hj:]@*c"\y!5C*^N{zb+"^*^*`*h"!j4&"h"y:b <5  *kG!gwxS0  *cN,*cN{zҽ{,*c*e{ozg ~*c#"c> :[ >   X N*c>:> !: q#G*eDM*h ERROR: $DISK READ$LOAD ADDRESS LESS THAN 100$DISK WRITE$LOAD ADDRESS $ERROR ADDRESS $INVALID HEX DIGIT$CHECKSUM ERROR $FIRST ADDRESS $LAST ADDRESS $BYTES READ $RECORDS WRITTEN $CANNOT OPEN SOURCE FILE$DIRECTORY FULL$CANNOT CLOSE FILE$HEXCOM VERS: 3.00 $   MEMORY OVERFLOW, USE [A] SWITCH$INSUFFICIENT MEMORY$OVERLAPPING SEGMENTS$      XXABS $$$  XXPROG $$$ ɀ  SAVE   SAVE y<1! ~ʋ;:* ͩ".~> 2`*.h~`>26!* #~2#~2r+s- * 1!~ ʀ# _6 |ʉ#6?#6 #6$\  <8Y‰\  > !| w\  : V"8: V "**Ͳ \  h}}€! *:2\  <T}Q** #s#r>2:Ÿ*.h6    1 > 2: :>2}2|2!"    ! !\ ( yŽw=G::xAڎҎa{!_Î 4 4(!~> L5*~#"a_ :f7ñ8 ʱ0vñ@7ñ҇0ÒGڐ7ñ7o:O& ʦ))))ÛzW{_f: CP/M 3 SAVE - Version 3.0$ Enter file (type RETURN to exit): $ Delete $ Beginning hex address $ Ending hex address $ $ ERROR: Bad close.$ ERROR: No directory space.$ ERROR: No disk space.$ @$ $H  I$ I!$HI"$ $"$ I ! A   !B B@@ $ ABH $  !" D$"B !`w #4o"c*e{ozg"hj:]@*c"\y!5C*^N{zb+"^*^*`*h"!j4&"h"y:b <5  *kG!gwxS0  ÞCOPYRIGHT (C) 1980 DIGITAL RESEARCH RELIRLFATAL ERROR$l$l1 ͺ!"!6 ͓*~=:!ͣ !6 :/::!ͣ !6:!!/ͣ < ͧ v! s+p+q>  ͍"̀ځ*>! q* * DM* 1q>> ͍+s#r=> !r+s+q+q+p+q> ͍"!6 > !*& *6 !4¦:! *w*  * * DM - * *s#r*"̀*":*. Tu -". u -2:~ l:\.~ -Ql.~ -dup. du -zT! "u*M: *M: !6 >}! : :<2¨#u {u> !͘,T> ͍)*DMTT" *%DMu{̀+s#r;'*DMu{ ̀N* "'ͅ>v":2T2u:ҙu͟!6>!ڙ : :<2:ҦT͟:!/Ҵ:͍ >> l͍ > !͘:/H*! *"'*DMT{T:lͪ : >> l?: &#*DMu{:2:2u͉Tp*>@O> *>@*w*~!s+q *& %*&  *& %*2& "*DMT*+"*DM3T"!p+q!\#s>!s:+&:2̀&ͣ :22ͧ!s+q+q*M*͍"̀̀Hm*DM̀ %*& "!6 |*#:w*##:w * :w!6!6\2!:!H÷:!!6l+6**͍!6\ * ^#V""!3"$"!o2ͣ :< J.< -B3!6#6 !6*#s#r!6\wl!6 !6!6 \ʒÇ.  -›!&6:!&:&=O ! N,:&<2&©**pH*#N*## * ^N0Jͭ1 Gͤͣ  <_1D**M*0G!'q:w**M 0*"!6}!6 :'҄Çͭ1Ҙ**͇H * > ͘ҿ:'/**M*0} <_1 K!6 #6 #6 :  . - 12(:(   T}L : 2: 2!:y :2̀y ͣ :22! ""*"!6!6 : *")*"*K: *: !6#6l: *)"ï !6l+6!6 ͔ :   G. - !"!\ "! "*^#V"  $!^q> !^] :^0O,h :^ AO,!_q:_OD :_OD !ap+q>`Mi !`\Mi !cp+q*bDMG !ep+q!d\+J<!hr+s+q*f& 4 N,*gDM͵ DM̈́  ,*3& +) >> l!C9 < ,*3& +) ^#V*3M  ,!iq*# :iw*#"!͛o #*DMu{! "*! *"D*!s*D!s*D!s!6 *! *"D*!s*D!s*D!s!6 *M: *M: *M: O `iN928 "92;!j6:;!jU :j=O !< Hq!j40 *8M*9 !k6:;!kڇ :k=O !< N,!k4g  ,!lq*' :lw*#"!͛ '*DMT{*! *"! "!ns+q: ͪ :n!O> !>O:n2nO!mT!w& 8 !w:o2% & *M͍ !6 !6 :n!2oK :m!o>O!mC!pq*pM !rp+q*q}OY *q|OY *8M *9DMg *;M !s6:;!sھ :s=O !< NY !s4ž !t6:;!t :t=O !< N: !t4 : 2u: :* *uMi  ,*3& +) N#F+q#p!C6 :? *uMY !vq "w:R:ҕ *vM*w *3& +) N#F+q#p*3& +) >>l2C:Ҵ *vM *wDMg !yq:y/:yH >!y# :y::::y8*;< -*:;2:@:<!C6*y& >) N#FG>!ykb :y/:yH҅V :y ¦:823*3& +) *9s#r:y! "+"-"/"1!36<::y <@ Gb :!:y<b :I:y/ *yM :y#~ >!y/͐ :yI: I 7:[:y [Ϳ  o >á2zO> Ҏ*zM@:zá2z*zM͵:z ,= >)-,),>,= *#"!|p+q*{~**{ > *{#"{>ʹ*~>~,H !6)!\ ""!o)ͣ !6 !6 ʹͼi**&  w:<2cͣ ʹ7*~-w!6*~)…!6:ғͣ !6*"*~)*: º!6***  ̈́:*: !6!6lͼͣ Þ!6*~>ʤ*#"}!6 *: 3ͣ *~=X!6*#"}:X! "}**Ҁ * *}s#r*>wÑ**}̈́ͼҡͣ ʹ*~]*~D!6*~I!6*~M!6*~P!6ͣ ʹè!q!6 !6 * "ʹ!""!o8ͣ > ͍J!"ͼҍ*~(c͆Ç*~_[],()!q: > :a/>z!/H:_2:!p+q*^#V"*##^#V"!6 !6 +6:W: Q!6 l<*6 +: m+_Ax!!6 Aڙ:ڐ!l+}::*~ :Hھ!*#~A<*wO>!*& *6 '!6:.+A: !l+: ! *& *\:<2O * N2!6 > !i*&  :b>!4F> :<2O * :w: !4~ʶ 6*#"*{zڶ! "ͧ*!~2xG:2G:p ˆx !4~ 6*#"*{z! "*!~2xG:2G x{_ C#5>ɯ$!p+q!6> !ڌ*& *~ x*& *N,:….,!4Q!r+s+p+q*DMG*DMFEͣ !s+p+q+p+q+p+qWͣ ! ">͍+s#r!oM*DM`: $*DM͐O> !> ͍ ͣ !9*DM͠O> 9ͣ  *"*#" `!r+s+p+q+p+q***DM ͮ*!r+s+p+q+p+q***DMͮ!p+q*DMp!6 > !*& *6 !4²*DMͰͣ !p+q * 6  * 6 *DM̀*͍!p+q*DM+ͣ !q*&  , ,!p+q*    !p+q*!p+q*!p+q*! p+q*! p+q* ! p+q* !p+q `*!p+q*   _ {ozg_ ogDM! >))덑o|g = DM! >))4 =,_ {ozg~ D^#V) N~ U^#V|g}o `_ {ozgO {ozgi`N#Fogo& og_ {_z#W LIB 1.1 $ REL $$$ IRL $$$    INDEX ERROR$NO MODULE: $SYNTAX ERROR$ APDC entry symbol $select common block $program name $request $error 4 $define common size $chain external $define entry point $error 8 $external + offset $define data size $set program counter $chain address $define program size $end program $end file$FTiw(5 ABORTED$DISK READ ERROR$DISK WRITE ERROR$CANNOT CLOSE$DIRECTORY FULL$NO FILE: $ PATCH VERSION3.0 PATCH.COM COPYRIGHT 1982, DIGITAL RESEARCH151282 654321:o 2! *m " - <  | #}0#:] <>2    : : :3! ] ~. a{ ##e ~ a{ ##~ 2m #~2n *m " : aB{B @2\ ! :\ Ҥ!e ~ #Z!CO"e >M2g >2 zÖ: *e }C|O:g M>2 *e }P|R:g L>2 \  2 |: @: ,?<2 L *>2 ó! > 2  6 =++w: #<: +=6 ?>! 6 #=D! ~a_{_ w#Q: Ƃ2 * 6 : ʝʯ>2 '0: =„>2 '0:S ʂ>2 '0: =±! 3 #:! ]* } 1]:]>2 >2 A: N* | :02# }0 _'_:# 2$ !]}02$ * " * " ? <͍ <ͭ * |́* }́* |́* }́2 > :" '2" {2 z2 : 2 ܻ: WÈ* | } * | } : _:$ d:$ G * |}* |}2 : here on, use cyl 051F+CB1D DB 0CBH,18H+L 0521 3A9A00 lda romid 0524 FE55 cpi 'U' jrnz setup3 ; probably wrong, but should not have WD1002 0526+2013 DB 20H,SETUP3-$-1 ; B is still eSSDDHH- from above lded curptn ; cyl offset 0528+ED5B DB 0EDH,5BH 052A+3A04 DW CURPTN 052C 19 dad d 052D 7D mov a,l 052E B4 ora h ; cyl 0 is special case jrnz setup4 052F+2006 DB 20H,SETUP4-$-1 0531 78 mov a,b 0532 E606 ani 00000110b 0534 CA3B05 jz setup3 ; partition 0 no xlat setup4: 0537 110600 lxi d,6 053A 19 dad d setup3: 053B 7D mov a,l 053C D384 out winlsb 053E 7C mov a,h 053F D385 out winmsb 0541 3A0000 lda @sect 0544 D383 out winsec 0546 3E01 mvi a,1 0548 D382 out winsc 054A B7 ora a 054B C9 ret read$win: 054C 3E20 mvi a,rdcmd 054E 329900 sta cmdbuf 0551 CDE904 call setup$win jrz error ; timeout on READY 0554+2848 DB 28H,ERROR-$-1 0556 3A9900 lda cmdbuf 0559 D387 out wincmd 055B CD3106 call winbusy jrz error ; timeout on BUSY 055E+283E DB 28H,ERROR-$-1 0560 DB87 in winstat bit 0,a 0562+CB47 DB 0CBH,0*8+A+40H jrnz error ; ERROR set 0564+2038 DB 20H,ERROR-$-1 bit 3,a 0566+CB5F DB 0CBH,3*8+A+40H jrz error ; no DRQ 0568+2834 DB 28H,ERROR-$-1 ; no more errors from here on... 056A CD7200 call win$rw ; xfer from common memory... 056D AF xra a 056E C9 ret write$win: 056F 3E30 mvi a,wrcmd 0571 329900 sta cmdbuf 0574 CDE904 call setup$win jrz error ; timeout on READY 0577+2825 DB 28H,ERROR-$-1 0579 3A9900 lda cmdbuf 057C D387 out wincmd 057E 110000 lxi d,0 0581 2603 mvi h,3 write1: 0583 DB87 in winstat bit 3,a ; DRQ 0585+CB5F DB 0CBH,3*8+A+40H jrnz write2 0587+2005 DB 20H,WRITE2-$-1 0589 CDFD05 call timer jrnz write1 058C+20F5 DB 20H,WRITE1-$-1 ; timeout - no failure here? we'll get error from winbusy? write2: 058E CD7200 call win$rw ; xfer from common memory... 0591 CD3106 call winbusy jrz error 0594+2808 DB 28H,ERROR-$-1 0596 DB87 in winstat bit 0,a ; ERROR 0598+CB47 DB 0CBH,0*8+A+40H jrnz error 059A+2002 DB 20H,ERROR-$-1 059C AF xra a 059D C9 ret error: ; possible retry... ; possible recovery - step, restore, etc. 059E AF xra a 059F 3C inr a 05A0 C9 ret ; ; WD 1002 interface routines. ; ; Written by: T. Hayes ; ; These routines provide the physical interface between the system ; and the WD 1002 winchester controller. ; winrest: ; ; Reset and restore the winchester disk ; ; On entry: ; B contains the configuration byte of the drive to be accessed ; ; On exit: ; A and B contain the configuration byte altered as follows: ; Bits 2 and 3 will be set if the drive is off line ; or reset if the controller is ready ; ; 05A1 DB14 in sysctl ;first issue a controller reset setb 1,a 05A3+CBCF DB 0CBH,1*8+A+0C0H 05A5 D314 out sysctl 05A7 F5 push psw ; 05A8 2601 mvi h,1 ;hold reset for > 50 ms 05AA 110000 lxi d,0 winrest1: 05AD CDFD05 call timer jrnz winrest1 05B0+20FB DB 20H,WINREST1-$-1 05B2 F1 pop psw ; res 1,a ;select controller (MR off) 05B3+CB8F DB 0CBH,1*8+A+80H 05B5 D314 out sysctl ; 05B7 2603 mvi h,3 05B9 110060 lxi d,6000h winrest11: 05BC DB87 in winstat ;Check busy bit 7,a ; 05BE+CB7F DB 0CBH,7*8+A+40H jrz winrest3 ;go on if not busy 05C0+280B DB 28H,WINREST3-$-1 05C2 CDFD05 call timer ;else count down jrnz winrest11 05C5+20F5 DB 20H,WINREST11-$-1 ; disable: 05C7 AF xra a 05C8 3D dcr a 05C9 329800 sta offline ; disable drive... 05CC C9 ret ;and return that status to caller winrest3: 05CD DB81 in winerr ;check for diagnostic errors 05CF FE01 cpi 1 ;if error jrz winrest31 ;ignore "diagnostic only" errrors 05D1+2803 DB 28H,WINREST31-$-1 ; 05D3 A7 ana a ;believe all others jrnz disable ;abort if an error shown 05D4+20F1 DB 20H,DISABLE-$-1 winrest31: 05D6 CDF705 call winpsel ; 05D9 CD2106 call winrdy ;ready wait jrnz winrest32 05DC+2005 DB 20H,WINREST32-$-1 05DE CD2106 call winrdy ;wait for device ready (again?) jrz disable ;abort if timed out (twice) 05E1+28E4 DB 28H,DISABLE-$-1 ; winrest32: 05E3 3E10 mvi a,rstcmd ;issue the restore command 05E5 D387 out wincmd ; 05E7 CD3106 call winbusy ;wait for not busy jrz disable ;abort if timed out 05EA+28DB DB 28H,DISABLE-$-1 ; 05EC DB87 in winstat ;get device status ; bit 0,a ;if there was an error 05EE+CB47 DB 0CBH,0*8+A+40H jrnz disable ;abort 05F0+20D5 DB 20H,DISABLE-$-1 winrest6: 05F2 AF xra a 05F3 329800 sta offline 05F6 C9 ret ;return that status to caller ; winpsel: ; ; WD 1002 physical select routine ; ; for now, assume "drive 0" has valid LUN ; 05F7 3A4100 lda modtbl+1 ; fully-formed SDH byte from "drive 0" ; 05FA D386 out winsdh ;and issue the select 05FC C9 ret ;return to caller timer: ; ; General down counter routine ; ; On entry: ; HDE are a 24 bit counter ; On exit: ; The counter will have been decremented ; zero is set if the counter is done ; zero is reset if the counter is not at 000000h ; ; Typical timings are 25 t states in the loop with an additional ; overhead of 29 t states in the calling routine. This assumes ; that the calling routine is using a call xxx and jr nz,xxxx. ; This gives a time of 13.5 usec for each iteration of the loop. ; Times when de goes 0 will be marginally longer but should not ; be significa֎ %@Y h   xy0h  dR' sIh2ΆSi9qr3LfQ f.Q"P ?T ? LG  &P#  @ : `d(c+ :  d>  2   @XH ? q  2 Y<F adFH `h  ܬY@ 2@ B :@ B  M ̭ ihQM>4cM ̭  [h Yb | ;V@fSm >XEU@XEY#0 `> 0@ CǃX !@ocE{$Uda hfn!d-4wf \υ  !ID) cØ `0 2}i4( i nVdAՙ iٸP>mdq _ ^ VdAQՙ i C +7~ €Cm# JJxmlQ& @ n>,{L(&@ٻ@WFV`@"@fpVn!YPhvn16hvY@W$uP@hfHl` Y-# 6Яሠ> УM>84ᦆd e =Dp Cg7~H @DPH T$E%h @SIDEDE$-@SECTÀDD@DBNK dE5DHh@DTACBdD$4( @SCRBF d$4dxP&@CMODEʀc$4 ?TIMOT ctUDE&?HALLOdD$  mov a,m 04B1 E603 ani 00000011b ; ptn 04B3 87 add a 04B4 87 add a ; 4 bytes per drive 04B5 3C inr a 04B6 3C inr a ; +2 for cyl offset 04B7 5F mov e,a 04B8 1600 mvi d,0 04BA 213204 lxi h,partns 04BD 19 dad d 04BE 7E mov a,m 04BF 23 inx h 04C0 66 mov h,m 04C1 6F mov l,a 04C2 223A04 shld curptn ; cyl offset of current partition 04C5 AF xra a 04C6 C9 ret setup$win: 04C7 2A0000 lhld @cmode 04CA 23 inx h 04CB 46 mov b,m ; SDH template eSSDDHH- 04CC 3A0000 lda @trk 04CF E601 ani 1 04D1 B0 ora b ; eSSDDHHH 04D2 D386 out winsdh 04D4 CDFF05 call winrdy 04D7 C8 rz ; timeout 04D8 3E99 mvi a,pcmpcyl 04DA D381 out winpcmp ; This is horrible, but since 302C ROM does it ; we also must to keep compatible on disk: ; if (trk > 7) trk += 4; ; else if (trk >= 4) trk += (trk - 4); ; For universal ROM: ; if (trk > 1 || ptn > 0) trk += 12; ; All: ; putHd((trk & 1) | (ptn << 1)); ; putCyl(trk >> 1); 04DC 2A0000 lhld @trk 04DF 3A9A00 lda romid 04E2 FE33 cpi '3' jrnz setup2 04E4+2015 DB 20H,SETUP2-$-1 04E6 7D mov a,l 04E7 E6F8 ani 11111000b 04E9 B4 ora h jrz setup1 04EA+2806 DB 28H,SETUP1-$-1 04EC 110400 lxi d,4 04EF 19 dad d jr setup2 04F0+1809 DB 18H,SETUP2-$-1 setup1: 04F2 7D mov a,l 04F3 FE04 cpi 4 jrc setup2 04F5+3804 DB 38H,SETUP2-$-1 04F7 D604 sui 4 04F9 85 add l ; CARRY not possible 04FA 6F mov l,a setup2: srlr h 04FB+CB3C DB 0CBH,38H+H rarr l ; from here on, use cyl 04FD+CB1D DB 0CBH,18H+L 04FF 3A9A00 lda romid 0502 FE55 cpi 'U' jrnz setup3 ; probably wrong, but should not have WD1002 0504+2013 DB 20H,SETUP3-$-1 ; B is still eSSDDHH- from above lded curptn ; cyl offset 0506+ED5B DB 0EDH,5BH 0508+3A04 DW CURPTN 050A 19 dad d 050B 7D mov a,l 050C B4 ora h ; cyl 0 is special case jrnz setup4 050D+2006 DB 20H,SETUP4-$-1 050F 78 mov a,b 0510 E606 ani 00000110b 0512 CA1905 jz setup3 ; partition 0 no xlat setup4: 0515 110600 lxi d,6 0518 19 dad d setup3: 0519 7D mov a,l 051A D384 out winlsb 051C 7C mov a,h 051D D385 out winmsb 051F 3A0000 lda @sect 0522 D383 out winsec 0524 3E01 mvi a,1 0526 D382 out winsc 0528 Bnt. ; 05FD 1B dcx d 05FE 7A mov a,d 05FF B3 ora e 0600 C0 rnz 0601 25 dcr h 0602 C9 ret ; TODO: make use of this somehow... winoff: ; ; If the 1002 is not at 305, seek track ; 305 then select physical unit 3. It is assumed that ; the host buffer has been flushed. ; 0603 DB84 in winlsb ;see if the drive is at 305 already 0605 FE01 cpi high lcyl jrnz winoff1 0607+2006 DB 20H,WINOFF1-$-1 0609 DB85 in winmsb 060B FE31 cpi low lcyl jrz winoff2 060D+280D DB 28H,WINOFF2-$-1 winoff1: ; 060F 3E01 mvi a,high lcyl 0611 D385 out winmsb 0613 3E31 mvi a,low lcyl 0615 D384 out winlsb ; 0617 3E70 mvi a,seekcmd ;now issue a seek to that cylinder 0619 D387 out wincmd ; 061B C9 ret ;return to caller winoff2: 061C 3EB8 mvi a,nosel ;now deselect the drive 061E D386 out winsdh ; 0620 C9 ret ;and return to caller winrdy: ; ; Wait for device ready ; 0621 2605 mvi h,5 0623 110000 lxi d,0 winrdy1: 0626 DB87 in winstat ;check for ready bit 6,a 0628+CB77 DB 0CBH,6*8+A+40H 062A C0 rnz ;return if it is ; 062B CDFD05 call timer ;else count down 062E C8 rz ;return if timed out jr winrdy1 ;else try again 062F+18F5 DB 18H,WINRDY1-$-1 ; ; winbusy: ; ; Wait for device not busy ; 0631 2607 mvi h,7 ;set up dead man counter 0633 110000 lxi d,0 winbusy1: 0636 DB87 in winstat ;get status 0638 2F cma bit 7,a ;if not busy 0639+CB7F DB 0CBH,7*8+A+40H 063B C0 rnz ;return 063C CDFD05 call timer ;else count down 063F C8 rz ;and return if timed out jr winbusy1 0640+18F4 DB 18H,WINBUSY1-$-1 ; 0642 end  ; ; Reset and restore the winchester disk ; ; On entry: ; B contains the configuration byte of the drive to be accessed ; ; On exit: ; A and B contain the configuration byte altered as follows: ; Bits 2 and 3 will be set if the drive is off line ; or reset if the controller is ready ; ; 057F DB14 in sysctl ;first issue a controller reset setb 1,a 0581+CBCF DB 0CBH,1*8+A+0C0H 0583 D314 out sysctl 0585 F5 push psw ; 0586 2601 mvi h,1 ;hold reset for > 50 ms 0588 110000 lxi d,0 winrest1: 058B CDDB05 call timer jrnz winrest1 058E+20FB DB 20H,WINREST1-$-1 0590 F1 pop psw ; res 1,a ;select controller (MR off) 0591+CB8F DB 0CBH,1*8+A+80H 0593 D314 out sysctl ; 0595 2603 mvi h,3 0597 110060 lxi d,6000h winrest11: 059A DB87 in winstat ;Check busy bit 7,a ; 059C+CB7F DB 0CBH,7*8+A+40H jrz winrest3 ;go on if not busy 059E+280B DB 28H,WINREST3-$-1 05A0 CDDB05 call timer ;else count down 0032 ALV0 0232 ALV1 0000 BC 0099 CMDBUF 043A CURPTN 0434 D0CYL 0432 D0DSM 0018 D0H 0438 D1CYL 0436 D1DSM 0031 D1H 0002 DE 0032 DEV0 05C7 DISABLE 0050 DPB0 0061 DPB1 0000 DPHTBL 059E ERROR 0000 FALSE 0004 FSEC 008E HERE 0004 HL 049E INITW0 04B0 INITW1 044F INITW2 0441 INITW3 043C INITWIN 0004 IX 0004 IY 0131 LCYL 04C2 LOGINWIN 0040 MODTBL 0132 NCYL 0002 NDEV 0004 NHED 00B8 NOSEL 007D NREAD 0011 NSEC 0098 OFFLINE 0432 PARTNS 0008 PARTNZ 0099 PCMPCYL 00CA PTNEND 012E PTNOFF 0020 RDCMD 054C READWIN 009A ROMID 0010 RSTCMD 0070 SEEKCMD 0514 SETUP1 051D SETUP2 053B SETUP3 0537 SETUP4 04E9 SETUPWIN 0016 STRING 0014 SYSCTL 009B THREAD 05FD TIMER FFFF TRUE 6530 VERS 0631 WINBUSY 0636 WINBUSY1 00A0 WINCFG 0087 WINCMD 0080 WINDTA 0081 WINERR 0084 WINLSB 0008 WINLUN 0085 WINMSB 0603 WINOFF 060F WINOFF1 061C WINOFF2 0081 WINPCMP 05F7 WINPSEL 0000 WINPT0 0002 WINPT1 0004 WINPT2 0006 WINPT3 0621 WINRDY 0626 WINRDY1 05A1 WINREST 05AD WINREST1 05BC WINREST11 05CD WINREST3 05D6 WINREST31 05E3 WINREST32 05F {2 x < <͍ C?C C >2% %  :' YPyPtz\   V xw <͍ <:$ ڶҏکÜ:$ 2) > :$ 2) >:$ 2) >:$ =2) >2* !  :* O "+ !9  :) O F*+ ~w x <͍: > > 2} ! "~ "\  ʽtS  \    _ " 2 ~ B* : #=I" 2 ^C* : #=b<* }B* | B!] >I.C!e >I<:\ ̹@B:C<: 0B C:" 2( :" 00B:( 0B C: 9:<!e >b  9O9$9p<! >b9f<:] ͍ͣ9<!m >I#   <9ͣ< <9͍9<:\ @B:C|zʒt< <  1Q ̓ͮUtͳr  CP/M 3 PATCH - Version 3.0$ ERROR: $PATCH requires CP/M 3$Invalid file type: .$Serial number mismatch$No file: $False password: $Invalid patch number: $Drive $ is R/O$ on $Illegal drive: $ Enter File: $ Enter Password: $ Do you want to indicate that patch $ Valid file types: COM or PRL$ Valid patch numbers: 1-32$ Current patches for $ WARNING: Patches greater than $ exist for $ has been installed$ already exists for $ Patch $None$ for $ Patch installed$ Patch not installed$ $ $: $ COMPRL151282 @ !p+q*! p+q*! p+q* ! p+q* !p+q `*!p+q*   _ {ozg_  i!v"/!Q/+>c!K-6 */K>XG!+>yC!Q/+>c!+Q/>r–! }o|g}ʖ!#"/!/ –!/ ʖ!/+>c!/ͷ~g"B,U"G-!,,> c!o0ͷX:F-!,,> c!q0ͷ~*G-w#w:F-X!s0͡!F-6 *G-*G-^#V#)))"I-*B,*G-^#V))W+"B,*B,>og"@,:F-f!,,> c!y0ͷ~!{0!+Q/>r2K-*I-w#w2P/>2O/2N/!/(,>t! "N-:F-X!D,LG!),>y :#!#6 !Q/D,>_:O/!N/:N/2O/2N/!P/4!}0!0*L-#"L-!0A !/*!/>X!/>Xt!D,KLG!.,>y:O/!N/f:N/2O/2N/!/>X!.,!,@!D,KL(,tî!N/4!,/>c!0!0!0n !N-~#!0̓ ã!0ͬ!D,/,>c!0~U! 9"0:#Z!#6 !#"/r*/>$Gt!##>Gt!#0,>Gt!#6 !#6 !#"0!0T!F-6!"#!D,6 !06 :0}͐3>!D,ͧd*0!F-6!#6*##"#*# |.! "0}20!0>!#*0"0!0U!#"0!0+ !#*06*0 "0!04í! "#:+.!+6 :# :# :#.~!#*#~20:0 20:0Q~:0Þ:K-z"/!0Ur"/*/ 3,>Gt!0#!D,6,> c!0ͷ~Ͳ"0~# ¦*0^#V"0*0^#V"0͕!1"1!216 >261251:!12:1::1!51!!1:51og~271:21!216 {:71!61281*0:61o:81OLG!1>c:81og>og}281*0:81ogW"0*0:81og####"0*0*0W*00>c*0";1!;1ͷ~>291!1n& }2=1:=1!91 *1:91og" 1* 1~og |* 1>ߦw* 1~?* 16_* 1~@* 16`!914å*0++*0)" 1* 11>_*0^#V"31*0^#V#r+s* 1*0*0^#V)))s#r*0:61_L*0*0^#V)))>t*0*0^#V)))w#w!31#`*0*31)))^#V1j`*0*0^#V)))"1*1!1>Gt*0*31)))"1*1*1>Gt*31+"31*0*31)))^#V1j!31#T*1"1*0*31)))"1*1*1>Gt*31+"31*11>Gt:71%^}2C1:C1!A1$ *0:A1_LG!>1>t!0>1xy!0>1xy !B14:A1!!1:B1ogw!0>1xy :B12!1!A14ì*00>c*0"D1!D1ͷ~^#V"F1*F1^#V> ͍!H1 *!H1> XÓ1~# s ! 9"2!1"1!16*1w#w*1ng | *1KLG!1>yº !1**1~ogQ1~og)1^#V*1^#V#r+sH !11>c !1*>22*1~ogQ1~Y !11xyK !24H :2K !1!1> !1* *1*1^#V ͯ1>_ *1~ogQ1~ !1*{ !1*!11xy !1*é !1**1~ogQ1~ !1* *2:1 !16 ! "1*1n& "1*1"1' *1#"1*1*1W7 *1*1>Ó*1~og |c !1>ߦw !1~?t !16_ !1~@‚ !16`Y2 ~# ˆ *_2^#V"e2*c2^#V"g2! "2*[2^#V"2*2*2W *]2*2 ͯ"2!2 :2 *e2*2)))~# *g2^#V#*e2*2)))s#rc *e2*2)))^#V"2*g2*2))~#K *g2*2))^#V"2% *g2^#V#*g2*2))s#r*g2^#V#r+s*a2^#V*g2^#VW !i272>!c!2ͷ~*2+|´ *Y2^#VO"2þ *Y2^#V"2*2*g2++*g2^#V))s#r*g2*g2^#V))w#w*2#"2ô 2~# *26 *2LG!X2>yC *2"3*3#~>!3w:3og2~C :2 !26 *e2^#V#"3!3"323!3> *3++| ! "3Ñ *3>og"3*3:3og)2s#r!34d ! " 3*e2^#V" 323*2"3!3"3* 3* 3W_!34:3og)2^#V" 3*e2*3)))^#V"3*2*3j/*3+" 3* 3* 3"3!36\*3*2jY*3#" 3* 3* 3W"3!36 \Û :3o* 3"3u* 3"3*e2*3)))^#V"3*2*3jʛ*26*3*2s#r3 ~# ±*3^#V"#3*!3^#V"%3! ÷>2.3*3~ʟ*34*3~og"3!3A !/3*!/3>XG!3>y.!/3>X3t!/3>XG!3>y[!/3>X3t*3!3> }23:3ʐ!/3>S*3:3<_Lt*3"3!3ö*33>_*3"3!3!;3"93!3*3>! t!<3"53!L33>Gt!Q33>Gt! "'32.3*'3*#3^#VW*'3#"'3*#3*'3)))^#V!<3>p! ")3*)3 |*53+*)3"73*73~ ]Æ*73~_n*736?|*73~`|*736@*)3#")38*#3*'3)))!M3>Gt*#3*'3)))^#V")32-3!)3~#ʖ:-3 ͟!<33>t!M33>t2-3!-34*%3++*)3))^#V"+3:,31!Q3:-3og ͯ3>Gt*+3O"+3M!Q3:-3og ͯ3>Gt!3A !/3*!/3>S!L3:-3og ͯ>t*%3*)3))^#V")3ø͟!.34*3~!.3! t:-3og ͯ}!;3w!;3~w*93:;3=_L3t*93!3>_!3^#V"<:F4!F46 *<KLG!H<>y+!E46ð!E46 !4"$Gt!'4I<>Gt!*46 !>46 z"!4*<@*<"r2<:E4:<>2<>2<*Gt!^<<xy;!<8!<5!<͛#E!<͛!<5:22%^}2<:!4*<@*<"!4*<@*<"2<*t!<͆!<4!<͆^#V^#V  $ "/  Later CP/M or MP/M Version Required$*#=* *#={ozgY|g}o!\ !l ! ÍÝ 3>Ý !*  3>K*  !*          >                          ! " # $ % ( ^#V^#V   F3O3*# 72gl*<"? 'w#-! 9~sG~#s4! 9~.Y+60e0e6 #M+r>o& 9y>o& 90w+Š6./ G!  >0 >-3T]))寕iO> `G>0 <  DM0 > Ew#E~#X~#W #Ý! 9Oo> gy~#o> gxGGtwF#" WObk++~+ y~#/~! >)< D=M)6ɯo> g{ozg!dÄlmnp  r Conversion 2!Ä *%=|^#V"%=###^#V#N#Fxʿ #~ò*%=|^#V#N#F! 9yx"%=:L# ! 9!#{z#  ! ! 9:]#O !^# {#z!]#5#}OD*#=~r##~#fo9!NÄVWXZ  \ Free Space Exhausted ##^#V#{_zW;{_zW>4z˜{##^#V# ##s#rs#r#s#r+++~sw#r####}*#=}|5* {z5+F+N+V+5^{;{z;}|;{i`~sw#r##q#p i`N#F#^#V~;q4#p+i`##s#rA"]" FREE Request Out-of-Range$ Free Space Overwrite$G KҜMbkÜiFhNhN#Fh^#V"#y2#xүi& ͩ x>!J#{#z*#*# xyxM_ !^#VͤG>(Iỳ>)I|*<|6<ͤͶò">,IG> _O! O! O!0:IIWWG|e}e ڐdԒ ͒ ڝÔxWN #~Iæ!wͤ*=! 9{_z{ G>#I*=>=^#V#q>: >?I!oͤ ͤ>=I^#V|A}8.))ä#F>A> #\~ >.~ =M^#V# File: Traceback:  ERROR FIXED OVERFLOW OVERFLOW UNDERFLOW ZERO DIVIDE END OF FILE UNDEFINED FILE KEY NULCONCONRDRPUNLSTBADG!]#~8  " Condition Stack Overflow$4Ox !< w#s#r#s#r! 9!^# s#r!]#N !< +++++q #{Š #zʏ ++~q ++!]#5! ~# ž Ú !]#N !< +++++¹ #~# +{ #z ++~ù #^#V=!L#~9!5:L#_ !M#^#V"J#~#.~# !*#)))))# )| !*~#|}*#"#:L#*J#~#w# F!*#{ `! d!! #"# Ö!Copyright (c) 1980 Digital Research, v1.3 ! "!="="%=2]#2L#*'= !"= q#p##}o"#=* }o|!""+w+w+r+s4w#w#s#r <2)=++*!=s#r"!=*=#"=*=DM!!=x~¨"#~+¨"+F+Nq#p*=+"=ʣ"Ҧ" =Y"!+ ~O~#~G! >w!/ x"yʞ" >O6# x"   h" =ɯ ~#fo++"!=~#"*!="²""""  Insufficient Memory$ Invalid I/O List End of Execution$# d  d (Copyright (c) 1980 Digital Research V1.3  MXList SYM d$PlPRINTER busy XREF 1.3 no SYM file no PRN file CP/M PRNXRFABORTED. V́ +  1@+ >    FG1"z* QS cE5T @  /// ,,D,B,G-,Q/D,D,L-,D,D,N-P-L-N-P-G-@,I-P/O/Q/G-I-D, 0 0 0 //D, symbol table overflow ' invalid SYM file format       { *$' symbol table reference overflow 22i2  0# +3 3 3 2 WINREST6 0072 WINRW 0082 WINSC 0086 WINSDH 0083 WINSEC 0087 WINSTAT 0030 WRCMD 0583 WRITE1 058E WRITE2 056F WRITEWIN 0200 ZSEC 0000 ?BNKSL 0000 ?GETDP 0000 ?HALLOC 0000 ?TIMOT 0000 @CMODE 0000 @DBNK 0000 @DIRCB 0000 @DMA 0000 @DPH 0000 @DSTAT 0000 @DTACB 0000 @LPTBL 0000 @RCNFG 0000 @RDRV 0000 @SCRBF 0000 @SECT 0000 @SIDE 0000 @TRK  ; winbusy: ; ; Wait for device not busy ; 0631 isable ;abort 05CE+20D5 DB 20H,DISABLE-$-1 winrest6: 05D0 AF xra a 05D1 329800 sta offline 05D4 C9 ret ;return that status to caller ; winpsel: ; ; WD 1002 physical select routine ; ; TODO: get LUN from somewhere... (head too?) ; for now, assume only LUN 0. ; 05D5 AF xra a 05D6 F6A0 ori wincfg ;select ecc and sector size options ; 05D8 D386 out winsdh ;and issue the select 05DA C9 ret ;return to caller timer: ; ; General down counter routine ; ; On entry: ; HDE are a 24 bit counter ; On exit: ; The counter will have been decremented ; zero is set if the counter is done ; zero is reset if the counter is not at 000000h ; ; Typical timings are 25 t states in the loop with an additional ; overhead of 29 t states in the calling routine. This assumes ; that the calling routine is using a call xxx and jr nz,xxxx. ; This gives a time of 13.5 usec for each iteration of the loop. ; Times when de goes 0 will be marginally longer but should not ; be significant. ; 05DB 1B dcx d 05DC 7A mov a,d 05DD B3 ora e 05DE C0 rnz 05DF 25 dcr h 05E0 C9 ret ; TODO: make use of this somehow... winoff: ; ; If the 1002 is not at 305, seek track ; 305 then select physical unit 3. It is assumed that ; the host buffer has been flushed. ; 05E1 DB84 in winlsb ;see if the drive is at 305 already 05E3 FE01 cpi high lcyl jrnz winoff1 05E5+2006 DB 20H,WINOFF1-$-1 05E7 DB85 in winmsb 05E9 FE31 cpi low lcyl jrz winoff2 05EB+280D DB 28H,WINOFF2-$-1 winoff1: ; 05ED 3E01 mvi a,high lcyl 05EF D385 out winmsb T Copyright (C) 1982, Digital Research  BNKBIOS3 SPR F700 0900 BNKBIOS3 SPR BA00 2600 RESBDOS3 SPR F100 0600 BNKBDOS3 SPR 8C00 2E00 60K TPA $$$$$ W8  I  XZ sk|  (  9  J  [  l  }        @ U' Z37X Z100 EPSON ASSOC FMT8 FMT9 FMT10 FMT11 FMT12 FMT13 FMT14    Q  1  q   _#~pW~# ~(<#~#恻 6~p 0#^#V#N#F##  O>w#O>pw!r #######~ !r =KAYPRO UNUSED MMS Z37 handler v3.100e$ 4 (4(4 ]ðñô7YKAYPRO Parallel Printer v3.100c$  23! YN#F#~zîܙrܻKAYPRO Keyboard handler v3.100e$ 4     laÉ}KAYPRO Z80-SIO2*s{Yvvvv v8>:2f > Q{ɀ/OLOR`'|KAYPRO CRT driver v3.100g$ PX PX PX ::G:O 毰>2 :Q!f ~6  D e  :?>(>25:Q*s  Q G! XRyW~KAYPRO Floppy Disk Controller 3.100e$  COM A2üBżKAYPRO Winchester Disk Interface 3.100e$ D e?S[ú x2( :((?:A2( KAYPRO CP/M 3.101b (c) 1985 DRI and DRM $ No CCP$ CCP  $> | (*** $> ( | G({.x:A( s.1._> #Wo> g2AG> Y !! ^#VA** $J>| **9(>M*** @>y$A{CM^#V#zy8#0#!nodev nodev nodev nodev nodev nodev nodev nodev  M sC1C!4!~#|~(5 #~#fo~ +6#### > *}D 0000000000000000001R *SmwrX8#;@E\aÜPÒ/×ï) L× _o @ à  1 O  j$   | Ãà à à BB     +"}{_}o>2~77ø~7"9:OG#Q{ozg# "" !2*%DM**ѵ+))  H~#+}#<:<ʲ<77:<ʢ =2(*f*(}DɯQ"(>QKQKQ>Q"%Q!*$ K*"x!*! @$@hK\K:K ~#~ w* NK* NK^#V#N#F!x>QGQx3ڰbڼqҼo5p5"""*!yb! ~G*!N Kկ2}!,"** NK6  :+O K2$^#V#N#FxNp:$p:Gjxj Y# A>QFQ KK{<<ʽ! ~6 69BK! OS $ N wy! "(9"f1f! Ҕ2! ~#foCOPYRIGHT (C) 1982, DIGITAL RESEARCH 151282     $I$I$I$H@ HUUUUR$ D @ @ URI I! $@!I BH D          ; @  P    P    (  ?   (  ?   D  F    ?       (          ; @  (   @        @  $      [ ?       (          @  (  @   (NyN++ >yx+8 xɯLPT  >(y@@$ R _   $  _   $ U  EM xO_ P!! +~~0_W~@G+~悳_##N >yAyQNˑV~ 0=yl(NxN yxy~0_W~@G+~悳_##N >yAyQʮְ!wgNO ~ɯ(y>DCE DTE MOD xzWy{>> $xzy{><ܯ+| ɯ2[2Z*_ KEYBD !~:gܺ:m܂W 0:n܃_:gܺ:m܂W:n܃_M:\  :Zܑ0DGP !  )!P []:[OGBK:\2\[]! (!> 2h>2h [fʹSf2o[dʹSd2pW:o_:fW:gܺ>8>2m:d_:eܻ>8>2n:oO:pܹDM! 8(.:eܻ:n܃_ 0:m܂W|A Q A Yͨqͨ_!|g{ _z W0Dyx WzdG::{_>8(2j{_*_BKP  Y|W]Sk[ڷ >2i:jܷ[k͞2a(:hܷ:a[k͐:i/7:B*_P B|g"_(*ҫD*_/P |W] |g! = DM@*]T]:[O>PO |gͻ:[o& ë> 2h>2h:d _:f V*]K_ܷB0! B|gK] |GM! |GM*_0|g!P |gͻ*]P B|g:[O !P B*]:[_ R|W]*]ͻ!P R0#! R|`G}iO@^*]P PYDM|W]*_ |gGMR0! R DM*]ͻ*_0|W]!P :Z *_P R|g#zW|gx|y}>xzy{>++ xEͻ:Zܷ[]!P  0DO |gDMR|g[_ x|y}>xzy{> xxFx|y}>axzy{>_P |g"_ V*_P |g"_ V*_|g!P xx|y}>xzy{>#zW|ge:aLD (> ʻ (ʫʰ L Kd>2Y:\ (6*_P |gT] |gͻ!P *͐c!|g!Y6  yREhAG2a6 :aBbCʼy2f6 y2d:a=*l s6 y2g6y2} 2f:\2\! M:f G( P _:d PO2[{2Z [_V >yxOA Q A YDzWD:\͐D~w~w~w~w`> y:\2\>@2q*Z"b:\ 2\!\y0(=(=(=(=(=(=(!=(0~w~w~w~w ~w*b| 2dV:Zȷ=2Z*]P R:[ܷ :Zܷ(=2Z>P=2[[]>O2[*]O :[O[]<2[W!\y0(=(=(=(=(=(%=(0=(4:\(:q@(y2q:qܷy(/[]i:qO:\ܱx>@2q*]:[_W2[Rͻ:Z8_<2Z*]P zW"]K_B0  :O滱  CRT  !Y w#*A "Z*D "]*F "_>:Yܷœy y[]iu:[2Ͷ:%OHqqX1>  .H - > >:Ӱ082c>A `2%5!6#6 :Oyʶ:%gx0XDol(ˠ @t( 5 . %- og}:c0|! 57!" ~y/!62&/ > ͼbC { 7ɯO&  { % 7ɷO*q >_#> W2*N#~/ I({ 2"222s1:O!O F#N#fi !ƻ:W/G:lO*# (_!5_~ Ҧ: ӷ¦͞ æЀ  ˀ˩yq+Oxp>2Ͷ8h(˩H(ˀˀH ˩>2*o##"D8:<: ӷ > 2!ƻD*º*qq pn f *~  *~~G ?ڴ q#p>2a! 6 58Ͷ8H:c0 *F#N(((: FN6 6 ~ .` !V( *~~  pqÿ~_(  O(G(*ov:ӷ! ""*~"s222!>2 >2U ~º>22!~wU( ~wúϯ*~ #<(:!ӷʿ~wú*~ :R 2:Q ((1  m!ˮˎˆ#ˮ !# *o##"ӯ2~ą ~ :ӷ ɯ %ۄ ۅ1( >Ӆ>1ӄ>pӇ>ӆ& ۇw}& ۇ/}  ^ &ۇ_ } ͱ(ۇG ɯ<& } ˏ& `ۇ( } =2>ہ( w͡ ͡(>Ӈͱ(ۇG կ2>:ӆz:@3 }(  }8o<:@U [} xʻ }ӄ|Ӆ:Ӄ>ӂ> 2?i(H:?Ӈͱ(>ۇG 8_(4>02?i(%:?Ӈ GƯӄӅ<ӂ>Ӄ> ӇͱG.ۀ x !ۀ *"*" :>:@U> *o~<<_ !~#fo"į*o#F:ӆ͡>Ӂ* !_~2#  2>:P 2@!:@U! "":ӆ    B !  % $ ) 3 - 1 Q 5 ` 9 o = A 6530 = vers equ '0e' ; March 18, 2017 17:04 drm "FDC3KP.ASM" ;********************************************************* ; Floppy Disk I/O module for CP/M 3.1 on KAYPRO ; Copyright (c) 1986 Douglas Miller ;********************************************************* MACLIB Z80 extrn @dph,@rdrv,@side,@trk,@sect,@dma,@dbnk,@dstat extrn @dtacb,@dircb,@scrbf,@rcnfg,@cmode extrn ?bnksl,?timot,?getdp extrn ?halloc 0000 = false equ 0 FFFF = true equ not false ; Ports and Constants 0010 = fdc equ 010h ;floppy disk controller 0014 = sysctl equ 014h ;floppy disk control bits ********************************************************* ** FDC (WD1793-02 Floppy Disk Controller) ********************************************************* 0010 = FDCSTAT equ FDC+0 0010 = FDCCOMD equ FDC+0 0011 = FDCTRK equ FDC+1 0012 = FDCSEC equ FDC+2 0013 = FDCDATA equ FDC+3 0021 = dev0 equ 33 ; first drive in system 0003 = ndev equ 3 ; # of drives is system 0019 = LABLEN EQU 19H ; LENGTH OF Z37 DISK LABEL 0004 = LABEL EQU 04H ; POSITION OF LABEL IN SECTOR 0 0005 = LABHTH EQU 05H ; START OF "HEATH EXTENSION" IN SECTOR 0 0001 = MODE2S EQU 00000001H ; DOUBLE SIDED 000D = LABDPB EQU 0DH ; START OF DPB IN SECTOR 0 0000 = LABVER EQU 00 ; LABEL VERSION NUMBER 0060 = DPEH37 EQU 60H ; I.D. ;--------- Start of Code-producing Source -------------- cseg ;put only whats necessary in common memory... 0000 0601 dw thread 0002 2103 db d lXRF.XRF make error  '.XRF close error .XRF write error << < _<< b :$ 2) >:$ 2) >:$ =2) >2* !  :* O "+ !9  :) O F*+ ~w x <͍: > > 2} ! "~ "\  ʽtS  \    _ " 2 ~ B* : #=I" 2 ^C* : #=b<* }B* | B!] >I.C!e >I<:\ ̹@B:C<: 0B C:" 2( :" 00B:( 0B C: 9yÙ CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 CP/M 3 SID - Version 3.0$1   ! ~=W ! x ~#ôbx {~#o}o. à O$ y͏ , $    ͌  9 !z6 # L !zw͌ j # X :z 0 ͘=N#Fy} 80*z{¯ #z+++ ¥ z #½ #  · 9 !`͠  y9 !rͷ  y  =!z{w# % w!P͠  y͓ } * w#" ͌ @.@< !Eͷ ~P !ͷ ’P͌ Q!ͷ ªP} QxQ!ͷ  ͓ G@ Q! ͷ  y͓ Gþ!ͷ  ͓ Q!ͷ  ͓ Q͌ Q!.ͷ 6y#G͙ Qà!2ͷ Q͌ ͓ Q!>ͷ q eg͙ Q:zJEËC–EQyQxQRQ* * {zҷ* ~#" <AO GƐ'@'O xƐ'@'O N #  z8O!B N #N    ¾S P . * |}   ! 9" : q!" 28 !"9 :] ,:e &͟:l &:u &ͮ! I 1lĤ>#J ,!6 -X5AڔҔ_ !o^#V - G  + Q  1ͳҔ~½:,=”͍" ,~ڔʔ͍ =͍=͍!,o͍ "c=͍=”)*c )!"f,*f*c"h ,*cL>::ʗ^#V#L cxZy y~ #*f ڵ™y ¶"c:,*hT*f , ,T:e,> 2e,:ʔ%:e  ͟:u ' ͮ! I Y|”,,}5 2l~2m͍͍"n͍"pDMs !l6ʏ } "v=ʏ =ʏ YP !~ #^#V:l *v{ z "r~6 2t #w6  ” 1l*v*t!~4 #~#F# x ~#s#r#w>~ʽ ͍=; =”͍Lᯕo> gL,>#!u^#V#0}o|ge X x| y0ʃ GÏ yÏ  G| Q z,{ ,<,>'{>',*##V+^+N+y,L ~+ , :”%,ͳҔ~ ͍" = ͍" =”" > 2  ,Y,!|G }G , w#. ~ڔ ͍! =:r ”͍| ! | ! |”"!~ʩ #~#V§ z§ :w,  ‰ :ʔ!~ :w#s#r,  ¾ Ô!~ : 6  ~#^#V  ,:ʔ!\ 6 #>  w# ' > w# 1 6 ~! I =”*"!l 6~# T :] ?2 7ʔ! ">HXE͆*ʾ  \ ͤ2  w# ™ ͥ͝* ҆ ! ""Ô\ʔ:¾ W$ _$ $ O { x!  i`"v2 $ $ w# $ ͥ͝”þ \̀\̀ GтWx! ͓B :>ULT͆!6\ ~# S 2| :] !7<ʔ\ !t   _*\ ʣ \ w Ø *  +\ !ڔw{Ҕè * #^#Vr+s+6͓Ҕ* " s#s#rt ! *v* ",!*L*L*vL* +L,o=”͍L:X^#VL\~J ʯ.y:,>."Ž! ;w#́=”͍:ʨs#r#;”}w#:;#;>>2o! "#͍}ʔ==”͍""2mNl :ʔ!\ > 2| ! "*"~:8”*"*"*͠ڔ! "\ zn<ʔ*ͯ ~# _\ V”*#"͠:W\ J!*L!,:2:2> 2: :>2  N, !9# Ô ”J~,=”͍xA|”}ҔgA>;Ag};,;Q|”}!qw,s#r,:[ | _! ~ʐ![ 4Ð\ ͤŽ2[ g>>?,!e >Cw#>Ow#>Mw!u >Sw#>Yw#>Mw., * ͽw#  ͽ  * ?r# {zPY! |}>2!" "! Ow #w 0q!\ 6  ͤ!"~”͍͍͍!6 W6!6 # ,œ>2 ß͓ͣ ͓ͣ ͓ͣ ”ʔ   :@w# G6 #. 6 #  x !a_!~> 55*~#"ů2[ \ ͤͤͤͤͤͤ!e x#y#*}|͓"*}|":! ͓> _ͤ~# 07> >  ͤL:8>.^+~+:8*>:|}^ >.*f}o|/+- , 0 Ô^#V#*NyҔ** n +ñ q#^#V""~/o>g++Û! .ʔ@͔^#V= ͔^ 'D! ڔ'?!q'”S_&#hqf0 Ҕ)DM)) O I^*r^#V#^q̀))))oqh"s#r#!4-® +»*+ þ-y_xWþ!IX N!p~ !D_ ^!x^#Vx1>-~~>=G!q~L!9 #x sYYͳғ*v" ! 6 û+"f*v~#cڻʷ^#Vû~*v~Gx5@xv5 x805 x6 45>=*t~*t$5x*l$*n:585"CZMEIABDHSP! "2"t+"v! 91t*v~:t2l!~ʐ#^#V#~ ƒ!~6 ʳ=G#^#V#~xâ#"v!N#FN*>7l :|!~9#~#V*v9z9~==2wͲ:l <!*vNl   |Ͳd=Xl *v5Nl :l|*pMD*n:m7l ! "N2>**vͳҟ" *t"c, PASS !~*+"|w=2~ !~##Z :t*rw2t*vF#!s! ^#V&N&N,`r<¦Gæ::^#V#2*r^#V<[>èæxjê8_ æ*t2¦,:?*v###æG>è><7*|!N*v!>#> :!>=_~/w/w{G=YP"*##F+N+~a/o>g{\z\<33= > !y$ڇ *y$& > 'd  !y$4d SYMBOLS NEXT MSZE PC END 6!z$q!h#6?! h record(s) written.  h#  H !: #A {$O  !:h# !2h#!@ !:h#S:h#QHP!:#<2|$2h#:h# HG!)!2h#Ô!2h#02|$O> j!!|$6Ô!2h#02w$O> @ !!BH @ @A BH B! "BHI$$BI$BI $ HI D$HD$$ H  B!$D$"$B$DA!ABI$H B$I $HI$H$! $I $I$ I $I $BBHHA "HI$H!$HH$ IDH$$H$"BD $$$HH$B@@D!@ H " H " "BI $DI$I $ H @ H I"$A D@@H A$ $@ $@D IB!  $ H  $I$$HD H!"A""! I$DDI"I$ @$I"DH BH" !I B    B$H  $ @"IHBI $$@H@   @ @ @ D !@BA$!"  D!$A$ B@$@@$"$"@  D@@"DH $I!"DH$BB$"H @ $  !D$$I$I$$"A$$I  D UUTH@@!@H@  !$             F!M!T![!b!i!p! !@ !:h#S:h#QHP!:#<2|$2h#:h# HG!)!2h#Ô!2h#02|$O> j!!|$6Ô!2h#02w$O> @ !!BH @ @A BH B! "BHI$$BI$BI $ HI D$HD$$ H  B!$D$"$B$DA!ABI$    GET 1â CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321 SYSIN $$$Getting console input from $INPUT~FROM~FILE~STATUS~CONDITIONAL~FALSE~TRUE~CONSOLE~CONIN:~AUXILIARY~AUXIN:~END~CON:~AUX:~NOT~ECHO~FILTERED~SYSTEM~PROGRAM  #).6=GNRW\`enu| []=, ./; Error at the '^': $Error at end of line: $Invalid option or modifier$End of line expected$Invalid file specification$Invalid command$Invalid delimiter$File not found$Enter Password: $file: $SUBMIT of $GET from $ stopped$console$GET from $ stopped$console$Requires CP/M 3.0$CP/M 3 GET Version 3.0 $Get console input from a file $Enter file: $11N}0N|HG    +\Yr '2ͅ ! 6 *&  6  +   !6:!D*&  NZ *&  w!4! ":2" ͱ!6*&  ~ w!4a! "+~2*& "!6 !6%*: : H:HI%*:%*:%*:!6*DMͱF: : H:HÀ Fͻ : T :: H: Hғ: †̀ Ó%*:¨%*:½%*:*DMͱ:: H: H̀ ͻ v!q*&    !p+q*  !s+p+q*:w#6 *  *#"N#Fy      !p+q* !p+q* !q*& - !q:2!6 1 !s+q:2!6*& "1 m !p+q*m !p+q*< !q!6*& : > *& : :":!4!r+s+p+q+p+q: Di !6 ͯ*~ ʙ*~2*M2!6: :ڃÓ*M2nãͯO:2 :22*~2!6 *~2ͯ*~ )*N ! ** =2!!6!6:!:ø!4 ø*6 *:w:+s#ri : S*#"X!6:2O * ~2*& *:9ʩ!4*:w*& *:˜*& *~2j*6 *~2Y:2!6*#~2!4N * :!6 *& *:!6 !4N * ~2*& *~2*M2:> !HV !4N * ~2*M2% :2#+s#r*N2!E„ *#"i   !s+q+p+q:=2ʺ *:w*#"Ý !q!6 *""͐2:( !6(*& *& !s*& !s:C ::H, *+"C :C :++s#rͅ !6:!i *"*M !4K *M :Ҁ FÆ Y:Aґ ͅ *M ! ^#Vp      ͅ    !q!6:! *N*#"!4 ͅ !6:!V *!C !6^H  *#"!4 ͅ !q:at :{t : :OZ 2:ͅ ͅ l  ͐ !6 >! x 2 *& l :w:  : Ò : : Ò :=2O !l 6 ë :ev0,ndev 0004 C33E07 jmp init 0007 C39607 jmp login 000A C39009 jmp read$fdc 000D C3B709 jmp write$fdc 0010 1600 dw string 0012 00003D00 dw dphtbl,modtbl 0016 4B41595052string: DB 'KAYPRO ',0,'Floppy Disk Controller ',0,'3.10' 003A 3065 dw vers 003C 24 db '$' modtbl: 003D 00015058 DB 00000000b,00000001b,01010000B,01011000B ; drive 33 kaypro,DS,ST,5" 0041 8000F200 db 10000000b,00000000b,11110010b,00000000b 0045 00015058 DB 00000000b,00000001b,01010000B,01011000B ; drive 34 kaypro,DS,ST,5" 0049 8000F200 db 10000000b,00000000b,11110010b,00000000b 004D 00015058 DB 00000000b,00000001b,01010000B,01011000B ; drive 35 kaypro,DS,ST,5" 0051 8000F200 db 10000000b,00000000b,11110010b,00000000b 0055 00 motor$off: db 0 ;must be directly after MODTBL 0056 00 selmsk: db 0 ; 0057 3A5500 motoff: lda motor$off 005A FEFF cpi true 005C C8 rz 005D 3A5600 lda selmsk 0060 47 mov b,a ; all drives are the same, any mode will do? 0061 3A3F00 lda modtbl+2 bit 1,a ; QT drive? 0064+CB4F DB 0CBH,1*8+A+40H 0066 DB14 in sysctl jrnz motoff0 0068+2002 DB 20H,MOTOFF0-$-1 006A E6AF ani 10101111b ; motor off motoff0: 006C B0 ora b ; select off 006D D314 out sysctl 006F 3EFF mvi a,true 0071 325500 sta motor$off 0074 C9 ret 0075 dpb0: ds 17 ;disks may have labels. 0086 dpb1: ds 17 ; 0097 dpb2: ds 17 ; 00A8 savNMI: ds 1 00A9 savSTK: ds 2 00AB ds 8 00B3 rwSTK: ds 0 type$II$ext: 00B3 3A0000 lda @dbnk 00B6 CD0000 call ?bnksl 00B9 216600 lxi h,0066h 00BC 7E mov a,m 00BD 36C9 mvi m,(RET) 00BF 32A800 sta savNMI 00C2 2A0000 lhld @dma 00C5 7B mov a,e 00C6 59 mov e,c 00C7 0E13 mvi c,fdcdata 00C9 F3 di 00CA D310 out fdccomd 00CC C9 ret ;jump to appropriate routine 00CD 76 rd4: hlt rd42: INI ; or OUTI 00CE+EDA2 DB 0EDH,0A2H 00D0 C2CD00 jnz rd4 00D3 76 rd3: hlt rd32: INI ; or OUTI 00D4+EDA2 DB 0EDH,0A2H 00D6 C2D300 jnz rd3 00D9 76 rd2: hlt rd22: INI ; or OUTI 00DA+EDA2 DB 0EDH,0A2H 00DC C2D900 jnz rd2 00DF 76 rd1: hlt rd12: INI ; or OUTI 00E0+EDA2 DB 0EDH,0A2H 00E2 C2DF00 jnz rd1 00E5 FB ei 00E6 76 hlt 00E7 DB10 rd0: in fdcstat 00E9 0F rrc jrc rd0 00EA+38FB DB 38H,RD0-$-1 00EC 07 rlc 00ED A2 ana d 00EE F5 push psw 00EF 3ED0 mvi a,11010000b ;reset 1797 to TYPE$I status 00F1 D310 out fdccomd ; 00F3 DB10 in fdcstat ; 00F5 3AA800 lda savNMI 00F8 326600 sta 0066h 00FB 3E00 mvi a,0 00FD CD0000 call ?bnksl 0100 F1 pop psw lspd savSTK 0101+ED7B DB 0EDH,07BH 0103+A900 DW SAVSTK 0105 C9 ret 0106 = thread equ $ ;must be last statement in "cseg" dseg ;put most everything in banked memory... 0000 0000000000dphtbl: dw 0,0,0,0,0,0,dpb0,csv0,alv0,@dircb,@dtacb,0ffffh 0018 00 d0h: db 0 ;(hash buffer bank number) 0019 0000000000 dw 0,0,0,0,0,0,dpb1,csv1,alv1,@dircb,@dtacb,0ffffh 0031 00 d1h: db 0 0032 0000000000 dw 0,0,0,0,0,0,dpb2,csv2,alv2,@dircb,@dtacb,0ffffh 004A 00 d2h: db 0 004B csv0: ds (1024)/4 ;max dir entries: 1024 014B csv1: ds (1024)/4 024B csv2: ds (1024)/4 034B alv0: ds (1351)/4 ;max dsk blocks: 1351 049C alv1: ds (1351)/4 05ED alv2: ds (1351)/4 ; Max DRM+1 is 1024 (getdp3kp.asm) init: ; TODO: detect Kaypro 10 (only one floppy) and do not init all 3. 073E 3A5200 lda 0052h ; gift from loader: select mask 0741 325600 sta selmsk 0744 3A5100 lda 0051h ; gift from loader: drive(s) type 0747 FE01 cpi 1 ; ST (or at least not QT) jrz initST 0749+281F DB 28H,INITST-$-1 074B FE02 cpi 2 ; QT jrz initQT 074D+2831 DB 28H,INITQT-$-1 ; else error, just leave as-is init0: ; use max hash size ever needed, even if QT drives not installed. ; Even if we have 5 drives (2 win, 3 flpy) we still won't ; consume all the hash space (~55K). It is not fatal if we try ; to allocate more hash than available, just sub-optimal for those ; drives that fail. 074F 010010 lxi b,1024*4 ; safe value - the max ever used 0752 111600 lxi d,d0h-2 0755 CD0000 call ?halloc 0758 112F00 lxi d,d1h-2 075B CD0000 call ?halloc 075E 114800 lxi d,d2h-2 0761 CD0000 call ?halloc ; 0764 DB10 IN fdcstat ; CLEAR WD-1793 from power-on (or whatever) 0766 F5 push psw 0767 C3AB09 jmp setmot ; set timeout in case no more activity ; RET initST: 076A 213F00 lxi h,modtbl+2 076D 0603 mvi b,3 ist0: res 5,m 076F+CBAE DB 0CBH,5*8+M+80H res 1,m 0771+CB8E DB 0CBH,1*8+M+80H res 0,m 0773+CB86 DB 0CBH,0*8+M+80H 0775 23 inx h res 5,m 0776+CBAE DB 0CBH,5*8+M+80H 0778 110700 lxi d,7 077B 19 dad d djnz ist0 077C+10F1 DB 10H,IST0-$-1 jr init0 077E+18CF DB 18H,INIT0-$-1 initQT: 0780 213F00 lxi h,modtbl+2 0783 0603 mvi b,3 iqt0: setb 5,m 0785+CBEE DB 0CBH,5*8+M+0C0H setb 1,m 0787+CBCE DB 0CBH,1*8+M+0C0H setb 0,m 0789+CBC6 DB 0CBH,0*8+M+0C0H 078B 23 inx h setb 5,m 078C+CBEE DB 0CBH,5*8+M+0C0H 078E 110700 lxi d,7 0791 19 dad d djnz iqt0 0792+10F1 DB 10H,IQT0-$-1 jr init0 0794+18B9 DB 18H,INIT0-$-1 login: pushix ;save IX 0796+DDE5 DB 0DDH,0E5H lixd @cmode 0798+DD2A DB 0DDH,2AH 079A+0000 DW @CMODE inxix 079C+DD23 DB 0DDH,23H inxix 079E+DD23 DB 0DDH,23H sixd cmode ;save cmode+2 for faster access to modes 07A0+DD22 DB 0DDH,22H 07A2+590C DW CMODE 07A4 AF xra a 07A5 325D0C sta selerr ; NO SELECT ERROR (YET) bitx 7,+1 ; SHOULD WE READ TRACK 0 SECTOR 0 ? 07A8+DDCB017E DB 0DDH,0CBH,+1,7*8+46H 07AC C4C307 cnz physel bitx 7,+0 ; IS IT A 5.25" DISK ? 07AF+DDCB007E DB 0DDH,0CBH,+0,7*8+46H jrnz login1 07B3+2007 DB 20H,LOGIN1-$-1 07B5 3A5D0C lda selerr 07B8 B7 ora a ; was there a select error 07B9 CC0609 cz physel3 ; CHECK FOR HALF TRACK: must update DPB. login1: popix 07BC+DDE1 DB 0DDH,0E1H 07BE 3A5D0C lda selerr ;return error code, error during configuration. 07C1 B7 ora a 07C2 C9 ret physel: 07C3 210000 lxi h,0 ; 07C6 220000 shld @trk ; TRACK 0 07C9 220000 shld @sect ; SECTOR 0 07CC 2A0000 lhld @scrbf ;use BIOS scratch buffer to read Z37 label. 07CF 220000 shld @dma ;we must also make sure that bank 0 is selected. 07D2 AF xra a 07D3 320000 sta @dbnk ;set disk bank=0 (the bank we're in now) 07D6 320000 sta @side ;side=0 07D9 325F0C STA MODFLG ; RESET CHANGED MODE FLAG 07DC 3EFF mvi a,true ; flag a select operation 07DE 325E0C sta selop 07E1 3E05 MVI A,5 ; 5 RETRYS FOR A SELECT OPERATION 07E3 32560C STA RETRYS 07E6 CD9309 CALL READ ; TRY READING LABEL AT DENSITY ; CURRENTLY INDICATED IN TABLES 07E9 CA1308 JZ PHYSEL1 ; BR IF SUCCESSFUL bitx 7,+0 07EC+DDCB007E DB 0DDH,0CBH,+0,7*8+46H 07F0 C2F808 jnz physel6 ; if 8" error out 07F3 3E05 MVI A,5 ; RESET RETRYS TO 5 07F5 32560C STA RETRYS 07F8 325F0C STA MODFLG ; SET CHANGED MODE FLAG ; IX=mode bytes ldx a,+1 ; TRY OTHER DENSITY 07FB+DD7E01 DB 0DDH,A*8+46H,+1 07FE EE10 XRI 00010000b stx a,+1 0800+DD7701 DB 0DDH,70H+A,+1 0803 CD9309 CALL READ ; TRY TO READ LABEL jrz physel1 0806+280B DB 28H,PHYSEL1-$-1 ldx a,+1 0808+DD7E01 DB 0DDH,A*8+46H,+1 080B EE10 xri 00010000b ; return mode bytes to former state stx a,+1 080D+DD7701 DB 0DDH,70H+A,+1 0810 C3F808 jmp physel6 ; jmp to error 0813 AF PHYSEL1:XRA A ; ZERO ACCUM. 0814 0619 MVI B,LABLEN ; GET LENGTH OF LABEL 0816 2A0000 lhld @scrbf 0819 110400 LXI d,LABEL 081C 19 dad d 081D 86 CHKLAB1:ADD M 081E 23 INX H DJNZ CHKLAB1 081F+10FC DB 10H,CHKLAB1-$-1 0821 3C INR A JRZ PHYSEL2 ; BR IF CORRECT CHECKSUM 0822+2812 DB 28H,PHYSEL2-$-1 0824 3A5F0C LDA MODFLG 0827 B7 ORA A ; MODE BEEN CHANGED ? 0828 CAFD08 jz physel7 ; NO KEEPING OLD MODE BYTES ldx a,+1 082B+DD7E01 DB 0DDH,A*8+46H,+1 082E EE10 xri 00010000b ; return mode bytes to former state stx a,+1 0830+DD7701 DB 0DDH,70H+A,+1 0833 C3F808 jmp physel6 ; jmp to error ; ; EXTRACT MODE INFORMATION FROM LABEL ; physel2: 0836 2A0000 lhld @scrbf 0839 110500 lxi d,LABHTH 083C 19 dad d ; HL POINTS TO HEATH EXTENSION IN LABEL ldx b,-1 ; keep old format 083D+DD46FF DB 0DDH,B*8+46H,-1 ldx c,-2 0840+DD4EFE DB 0DDH,C*8+46H,-2 mvix 0,-1 0843+DD36FF00 DB 0DDH,36H,-1,0 mvix 0,-2 0847+DD36FE00 DB 0DDH,36H,-2,0 084B 7E mov a,m 084C E6E0 ani 111$00000b 084E FE20 cpi 001$00000b ; z100 formats jrnz nf1 0850+2006 DB 20H,NF1-$-1 setx 5,-1; ; set mode byte 0852+DDCBFFEE DB 0DDH,0CBH,-1,5*8+0C6H jr setmode 0856+182E DB 18H,SETMODE-$-1 0858 FE60 nf1: cpi 011$00000b ; z37 jrnz nf2 085A+2021 DB 20H,NF2-$-1 bit 2,m ; check for extended density 085C+CB56 DB 0CBH,2*8+M+40H jrz gf1 085E+2806 DB 28H,GF1-$-1 setx 4,-1 ; z37x 0860+DDCBFFE6 DB 0DDH,0CBH,-1,4*8+0C6H jr setmode 0864+1820 DB 18H,SETMODE-$-1 gf1: liyd @scrbf ; get cpm sectors per physical sector 0866+FD2A DB 0FDH,2AH 0868+0000 DW @SCRBF ldy a,+labhth+2 086A+FD7E07 DB 0FDH,A*8+46H,+LABHTH+2 086D FE04 cpi 4 ; see if 512 byte sectors - if so set to z100 jrnz gf0 ; this is in here because the Z100 puts the 086F+2006 DB 20H,GF0-$-1 setx 5,-1 ; device type code in the label on 5" 0871+DDCBFFEE DB 0DDH,0CBH,-1,5*8+0C6H jr setmode 0875+180F DB 18H,SETMODE-$-1 gf0: setx 3,-1 ; z37 0877+DDCBFFDE DB 0DDH,0CBH,-1,3*8+0C6H jr setmode 087B+1809 DB 18H,SETMODE-$-1 ;; currently no 8" support in this module nf2: ; cpi 100$00000b ; z47 ; jrnz nf3 ; bit 2,m ; check for extended density ; jrz gf2 ; setx 6,-1 ; z47x ; jr setmode ;gf2: setx 5,-1 ; jr setmode nf3: ; cpi 110$00000b ; z67 ; jrz f1 ; keep old mode if device type not valid stx b,-1 087D+DD70FF DB 0DDH,70H+B,-1 stx c,-2 0880+DD71FE DB 0DDH,70H+C,-2 0883 C3FD08 jmp physel7 ;f1: setx 7,-1 ; z67 setmode: 0886 7E mov a,m ; get flag byte bit 3,a ; track density bit 0887+CB5F DB 0CBH,3*8+A+40H jrz gs0 0889+280A DB 28H,GS0-$-1 setx 5,+0 ; set drive and media to dt 088B+DDCB00EE DB 0DDH,0CBH,+0,5*8+0C6H setx 5,+1 088F+DDCB01EE DB 0DDH,0CBH,+1,5*8+0C6H jr gs2 0893+1808 DB 18H,GS2-$-1 gs0: resx 5,+0 0895+DDCB00AE DB 0DDH,0CBH,+0,5*8+86H resx 5,+1 0899+DDCB01AE DB 0DDH,0CBH,+1,5*8+86H gs2: bit 1,a ; density bit 089D+CB4F DB 0CBH,1*8+A+40H jrz gs1 089F+2806 DB 28H,GS1-$-1 setx 4,+1 08A1+DDCB01E6 DB 0DDH,0CBH,+1,4*8+0C6H jr gs3 08A5+1804 DB 18H,GS3-$-1 gs1: resx 4,+1 08A7+DDCB01A6 DB 0DDH,0CBH,+1,4*8+86H gs3: bit 0,a ; sides bit 08AB+CB47 DB 0CBH,0*8+A+40H jrz gs4 08AD+2806 DB 28H,GS4-$-1 setx 6,+1 08AF+DDCB01F6 DB 0DDH,0CBH,+1,6*8+0C6H jr gs6 08B3+1804 DB 18H,GS6-$-1 gs4: resx 6,+1 08B5+DDCB01B6 DB 0DDH,0CBH,+1,6*8+86H gs6: 08B9 2A0000 lhld @cmode 08BC CD000֎ % P`h xz@%h  dR' cap<@C7#ye9 1p`02 a y a y a y U ? GSY= L(>&[ - Kj@%`0 m f 0 6d@ =A7L ;;TL+ vvWL Q0ڢa]ٶ`u|iaը 6ۀ<]R ɗ u `,  X` 0  e2X` Ke`R9t$\|:) UX tQ ?"(@  f ^  ˀՇD4 ehZFW@ Agi w2̶00n[ #nۢ,e,~bl0v, ~Yt1n-.-" D  P "`  ,>` 2&a X (+ ctwp 7Imn,=E[4" P0x( bݕB ;X{ U P eFI n [? ,(7Yo0`@cp [Yo`8?ۧ~e@) ; 0n ,e f,  G 0n+aVf - ӈp Mf4 Ճ*ځ 2 >"0)0 FYt1D9x0l dsPށc@ġJġJ! 04Yd0#'6O P Oxd2 -RyWEd¸eePd 3wX<P#-2,@`̴ at2 @T̷Ha> `]b,f n B(`t=GYx1n *  xB ,n eYP†7MHEPet3L$fࡖ WK{@Rn3@eŸ:ˁ<^4GBH0`H+ YZt$4 H/-[%ہlܖa@ ]  \ۘ@! ] \nC vH ـa= x #31ö` Ba# W@ ``<2ʡ^8` 'q` aMOb ?Y0^A("b!`=PndlA' s " `l=sDndÔU d|Cc8eVY ' @$ ̲0 c7969\0lL܆:ݕY0Y c,;HYPe1gA@9C ՛C fP0 @%Ca#9o0;a0>r`d F솘D0Wr`a#$`f$|ePn a報c 'Ć&% eX1qbbP1`014aAa. J fPp >E>b ia T 0l&# l(]ZaG$  ? 4:#P!UIIZ4PQcJqQI.5PP#]155PFMQR4PУH%I 5ԐJa9I 95Sc? 9-M24SS#WQB4S     !4¢ W2!p+q*~ A *~@O:!6> !ڄ : \ .*& *~ } *& *>O!4F ">ʰ *++"~Ұ "l p̀\ `" ̀*} *|2 : ͆ ͅ l p\ `" *"ͻ ͐0 ͅ \  ͯ!p+q!6+6>!W *M[ :O[ !47 :!q*& *>*&  z !6 : ʍ ͻ "> "*DM) ҽ  *DM ͅ Í #   : ͻ ">7*DM) 7"+*DM 6ͅ ">[?p͐0hͅ *DM    !q"!+s#r: ʨ:=+s#r*DM!p+q*"!\ "b"ͻ > ͅ *#"*~[ͻ :: H'%*:„:?ͻ %*:\ yÁ:lyÁ:|yÁ ͻ $!6 :£!6%*::Һ!6 ÿ!6$::!6 !6$: :!6!6 $::!6 !6$ ͻ ͅ !p+q*~ ~ HR*#"1*~ ^> >! `i^#V#~#fo͟]ƒywôG:±xAa{Ҙ_ ʫ ʫß`i~#~2#~2#~2* | \  !\ ~ 2.n~`>26!.t~:s}>26!N#F#*  "^q#Vp"N#F##"^q#Vp"4!7    !6ë7  \  \  m>_  1 : ~# yɍWARNING: Cannot redirect from BIOS $ERROR: Auxiliary device redirection not implemented $ERROR: Insufficient Memory $ " "  SYSIN SUB _ og_ ogDM! >))덑o|g =_ og_ {ozgi`N#Fogo& og ~  F  GET :<***.n6.t6 LL! p:~y !6  <ʊ~"x!F#fh!:~!«!>w~:!5*.~w: ; :~! 9"1W:.~ !5< W@w.tEy!h g ={  ͩ* . +6.w   *ͩ2*.6#6 *.~w#~=~# Ʌo$x(\!54  !F6ȷx(\>^\@_: N# x€ʹ> ʹ ʹŸ*.>wm#wM~xµmp> \ 8> " "   SYSIN SUB  hhhhhhhhhhhhhh  151282 COPYR '82 DRI gggggggggggggggggggggggggggggg "D ! BH!! $@ !HA@  H!@    @BP ogDM! >))덑o|gҟ =DM! >))Ҵ =¬~ º~ ^#V) ^#V|g}o _ {ozgO {ozgi`N#FoÃ"zw"|z !aF6c#6F CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 654321  A͑"w*w}1ҫ!wE><0;!w!w6!w6 !w"'x!%xy2w:w!)x"w*w~2w*w~og |2w:w !+x!/x!F:w_>͉:G!w>A;2wRf%!DB$![D>6;!!D;!!w>;!!-E> ;!@%*}!w;@!7Ewx͛:!8Ewx͛:"w*w:wog <,;!3x!rx*7C ~og#))+"w*w#"w!HG"wbj"w!txDͺ(xx~# RE%!E>;%!F>;%@Ra%>B'!F>;%@*xx~2|x!F"w*w+:|xog!Gx͛:*w+:|xog*wx͛:R%!(DB$*w+:|xog>;!@!|x4nR%>B'@÷}x~# R%>B'!G> ;%@@%*=*w+*}x~og;@*w+*}x~og>;!9E>;!SE>;ͥ*w+*}x~og;*w+*}x~og#G>GA;*w+*}x~ogF>k}*xwÑ ̀*zw"w*w+"w*w+"w:w*w"w:w2w*w*w*w>og^ <"w*7C ^#V*w < *w<"w*w>og;#"w*w*w*w>og^ <"w*7C ^#V*w <!xE><0;!x*w>og;#"w*w*w*w>og^ <"w*w*w^+++*w>og^}2w!Hg"w*w"w!HW"w*w*w<*!xͨ*w*w<"w*w+"w *w+*7C ^#V<|z*w"w*w"xw!xD:w2w!x͂ :ww!xD!x͂ aÀ!xͨ!|w# À}! "w*7C ^#V*w<|!xD*w"x2x:w2x:xog:xogw!F6*w:xog)))))~!Fe!HG:xog)))))6*w#"w!x4!xͨÚ!w6 ! "w"w"zw"|w!w6*w` ~!F­!w6 *7C ^#V*w<2x:w2x:xog:xogog;#"w ^#V"x*vw*zw< *zw#"zw:w*~w*zw `;w*w#*x~og)))))*~w*zw `;> GA;*w *x~og)))))~*~w*zw `;w*w *x~og)))))*~w*zw `;>GA; *|w#"|w "x*x | !x/F><,;!x!8yC"~w*x)>og;"vw :w R9 %>B'!E>;%@!<,;!:ySx !w6!w6 !{yD><,0;!yySu !w6{ ͔( ^#V"y*y^#V"y:y *w*y)))))~2w*w*y)))))*w:wog)))))> GA;:w!F :w *w:wog)))))6 :w *w#:wog)))))og^|n !w55r !w5*y+"y*w+"w:w *w | *w#*w^|± *w#"y!yͨ!yͨ*w*w<"w:w=2w:w !w4Ó ^#V"y>2y:zw2y:yog:yog< *~w:yog `;~c *~w:yog `;~*w*y~og))))) >2y:yog | *w*y~og))))):yog*~w:yog `;:yogx͛:ʳ !y4W *~w:yog `;6c*zw+"zw:y!y4 > I*xw"w!yL!  *w#"w*w"w:yog#"w*xw*w< :y<2y:w2y:yog:yog*w+"w*y4nS ^#V"y*7C ~og*w *y~og)))))~og<*y"y!y 2y:y:wog#>og^"w*w <:wog"w*~w:yog `;*w*w)))))*w `;>GA;*~w:yog `;~*w+*w)))))*w `;w!w6P^#V"yR;%!-DB$!E>;!*y;!!E>;!@RL%>B'@(^#V"yR%>B'*y;%!-E> ;%@%*!w;@!7Ewx͛:!8Ewx͛:>m2y:w2y:yog:yogog^|*w:yog)))))6+:F*w:yog)))))w>2y:yog |e*w:yog))))):yog6 !y40!y4^#V"y!F6*w *y~og)))))"y!z"y>2z:zog |*y+:zog~g. *w *y~og)))))~g. `|! z:zogw!z4á*y Gx͛:R-%>B'!G> ;%@RI%>B'!2G>;%@c%*`! z;@! z>;!9E>;!SE>;ͥ! z;>2z>2z:zog |! z:z_>͉:*y+:zog>͛:!zF><0;!z!z5!z4Ò! "w"w"w2Rz2Vz2Wz"w*w*w"Szgo"w!HW"w!Hg"w*Sz*w<!XzD2Uz:w2\z:\zog:Uzog*w#"w:Vzog*w<|!mz͜:Wzog*w<|!qz͜!*w+"w:Rz!uz!yzÙ}z~# %*w*z~og)))))*}z^#V*z~og)))))> GA;*w#"w*z4*z~og*w<|˜*z~og#>og^}*zwz~# ¡*z"z!zͨ*w*w"w*z6 *w#"w%z~# *z~2z:w2z:zog:zog<\*z^#V:zog)))))6>2z:zog |U*z^#V:zog))))):zog6 !z4!z4*w+"w*z~og+"w*z"z*z"z!z͜2z:w2z:zog:zog<*z^#V:zog)))))6>2z:zog |*z^#V:zog))))):zog6 !z4ý!z4Ë*w*w<$*z"z!zͨ*w*w"wA!z͵"Hw͖!z͛"twåz~# I*z^#V*w;͍6!z>͓7!z͚"w!z͌!zp"w!z͘*z"z!zͤ ʤ!G ͊= z~# ­*z^#V*w;͍6!z>͓7!z͚"w!z͌!zp"w!z͘*z"z!z!zͩ ![ ͊=m^#V"z!z*z r::z52z9!z5!z͛"tw!z͵"Hw*Hw|f!zF><0;!z*Hw^#V"Jw*Hw ^#V"7C*7C^#V*7C ~og#;͍6!Lw>͓7*7C###"{!{A#͍6!Pw>͓7!Tw"z*7C ~gj"z*7C~!z W #:>2z:zog |l*z++:zog)w#w*z!zF:|e*7C ^#V |H:z=*z+:zogwe:zog+*z++:zog)s#r!z4×^#V"{*{>l7!Lw>l785"{!{^#V"{*{>l7>5!Lw>l78>55*7C ^#V^#V"{*{>l7>5!Pw>l78>55>^#V" {*7C ^#V* {^#V<&!S ͊=* {^#V͍6!Pw>l779`^#V""{!${"&{! "${*"{~*&{w*${ruq!U ͊=Û͇!({;!GG({x͛:ʙ>ɯB^#V^͞#V  ͪͪ"  Later CP/M or MP/M Version Required$*}* *}{ozg|g}o!\ !l ! *: 3>:͞ !L*  3>͞K*  !*   ͞ ͤ  ͤ    >    ͞ ͤ ͤ ͤ  ͤ ͤ ͤ ͤ ͤ   ͤ  Ͳ Ͳ Ͳͤ Ͳ Ͳ  Ͳ͞  Ͳͤ! Ͳͤ" Ͳͤ# Ͳͤ$ ͻͤ% ͻͤ( ͤ1 ^#V#^#V́"> ́"> > ́">́{2> ́"́">́"> 2!2  `i PY*}~##~#fo##^#V#{_z/!T]W{_z<KB ^#V^#V)F<*}! 9{ozg| #~wþ)) o |O#"9C[4BZ! 9SJ~#$:> $J& 9 }x2LCy j2MC"){AE$:RC+-/x2LCy2MC"){Aͯ:LC!MCP& G7! 9~#$&*){7<$2;C2PC2SC<2KC ! 9 V+iv-v>2PC#ҏ… ʉ ,v.¦#Ҧ,×eʰE +-#2QC$!LC5¡:MC!OC<_ !;C>w w>+!NC~5>. G:QCx0:NC> !PC~ 5!NC4!KC5-2QCx!KC^ 4{# # !;C~0>0"+{*9C~2/{:PCA Ϳ"A <:/{20{>Vͬ"!0{S 5~/o :SC‰ >9ͬ"ʉ >*ͬ"w  y *:0{! 9q#=€ Ï"> 21{<22{23{ 2.{:2{_ :/{"*9C~2-{:-{9 :1{ :1{21{͟" :3{=O:1{##:3{O:.{#͖"Õ Z *A!O:1{!y21{:1{)!:.{0)!:3{O:-{*#!> #;!:1{21{:3{O:.{#͖"Õ :-{͟"!:-{"†!:-{"o!:3{O:-{##͖"Û :-{21{:3{O> #͖"Û :1{!:.{0¢!:3{O> #!:3{=O:-{##:3{O:.{#:1{21{!:3{O:.{#͖"Õ :-{V":1{":1{21{͟"":3{=O:1{##:1{ "<21{͚"Û :3{O:-{"H":1{3":-{B="?":1{*?"> #͖"Û :3{O:-{CV"D:PCi"> # #Æ":-{C}"# >R#Æ"# >B#͖"͖"Û :0{*+{!3{4!2{4S+-$G:/{Ox*9C## ¶"<>Sͬ">+ͬ">-ͬ">Cͬ">Dͬ":/,.B!2{N*9C# Ⱦ"G:2{_ :/{O x*9C# Ⱦ#! i#9w$G:PC8#x+-L#SF#x+L#-SI#>+>-> F$ h#x=b#G#O# #:kCx#ډ#!ZCxO#ډ#$O#'O# £#O#> $Õ# µ#x¯#>$O# ##O#x#>O#='#$x!XC#$#:iC#$:XC> $#>29{!7{K':iC+$!XC+$> 3$> 3$3$26{!4{'!:{Ú=ê$$^$^#Vʃ$a$ͪ$F$#F|$#N|$#^ #r+s#^#V++r+s ~F$5F$$5^$q#pF$O$4~ $_$s#r#s#r#q!$Ú=$$C$ $ Format Overflow *C-& C ![{ .%O:Cy+%! 9G'%~#'%%y.% O:C=% Æ% ͹%F%{N%*iC|w%j& *iC*XC<#<> %> %͹%> %{=>'%! 9ʨ%=~#'¡%{>'%%Ì%{=>'%{>b%*XC++|2{!{'ɯ%>%>2|" |" |`i" |! 9"|!{%[| ~# %*[|~n&*[|~C&!U|>;G3!! !C(!C"i|!g|͋*k&!U|>;G3!R.! !C(!C"m|!k|͋*À&*]|"o|!o|͋*!q|(*a|^#V!aCs#r*c|^#V!cCs#r*_|^#V:|*qC:|G&!u|('*_|^#V}*qC}G&!w|(':C '*_|^#V}*qC}G '!y|(':C''*_|^#V}''!{|('^#V"}|!C"|*}|"|!|͚=2|!|K'^#V"|:CZ':C'*|'*|5!|6 :| ʀ'ͳ'r'a'ò'!|'*|'*|5!`C6 !|':`Cʯ'*|6 Ì'g,2|:|'!C"|! "|!|͚=!XC6#6 !|6 :C'!|'^#V"|!TC"|*|"|!|K1%(!C"|! "|!|͚="((:C(*|~ ?(*XC#"XC(*|~ S(!XC6#6 (:C(*|~ u(*\C#"\C!ZC6#6 (*|~ (*ZC#"ZC!ZC#(!ZC6#6 *ZC*kC#<|(!C"|! "|!|͚=('!`C6"|! 9"|!|(! 9^ |~# (*|^#V| )*| *| r:*| nb5)*| !|>=;O)!|>;*| :!|;*| ~#{)*| ^#V)))|{)*| 6P#6 *| ~#µ)*| ^#V))|)*| 6#6õ)*| 6<#6 *| 6#6 *|6#6 *|6#6 *| 6 *|^#V}4}2|*| ^#V} *!|44*| ^#V}"*>2|*| ^#V}M**| ~#M**| 6#6 *|"|*| "|*|"|!|(0*|^#V|Š**|"|! "|!|͚=^#V^#VOA:Cڨ*!*͚=2CO !C·*6ü* +~#w!C s#r!C4A**C* * I/O Stack Overflow ! 9"|!|*+! 9$> '+%~T]O  ++~+>x^#V"|*|6 ͌+;,T+!C"}! " }!}͚=M,]+^,2 }: }+,ͩ+:|> b€+,Æ+ͩ++>,;,+V,+D,+Ì+V,+: }+^,+,^,++D,+M,+,,é+!`C6 M,+V,+D, ,:|!`Cw,+g,2|*|~!,:|*|#*|~ogw*|4:|:| :|,:| ?:|':`C ‡,!TC"}! }81,! }6Ò,:`C2 }!`C6 : } ڡ,*XC#"XC: } ±,!XC6#6 : }"3" 3*3^#V#"3^#VͿ,,"$3,"(3|,|~Ϳ,,ya -A =.:;<>[]y *"3, -(-,$-,1J- o& ))))\ xH  g-#w g--"-*(3#ʖ-AҖ-G-,:ʛ- 6 à-p4- +4--#,-#*½-6?-w-¬-,---#6 -..- 4-.,.#*-6?.w--,.-.#6 .%#6 .*(3##^ ~?1.# *.xCON CON RDR PUN LST  M !L. ~"-$.-,1ҕ.\ |.l .$.! ~ .-!9.,°. ʾ.-#Ý.x =GÚ.->ɯ*(3+ .^#V.#{#z.6 #6 . r+s!}F#~*/!}6P   eA eA!}^ r+s6 #6 !}4^ N*(3|Z/}=G/.V/R.R/ O>~f/f/>ͨ/N*(3|’/YR.=/y‹/eAÎ/ >~ʞ/=ʞ/>ͨ/q2-3*(3/ "*3./{..**3 *(3#:-3O /.#s#r/../.  è/.r+s{0!'34**3+>|0+ }o͵,Ϳ,~2&3Ϳ,""3,:&3.1[.a0G:&3.1*$3p[04#6 3,:&3|00*3++"3Å0}+ʉ00}|23"3,0"31 F<|.1##"(36*$3s#rv-š2{ ʚ2*(3:&3w060*3"3 <1:&3š20  <ʚ2!0 call ?getdp ; setup mode bytes 08BF C2F808 jnz physel6 ; error if format doesnt exists liyd @dph ; set dpb addr in dph 08C2+FD2A DB 0FDH,2AH 08C4+0000 DW @DPH sty c,+0 ; store XLAT address in DPH 08C6+FD7100 DB 0FDH,70H+C,+0 sty b,+1 08C9+FD7001 DB 0FDH,70H+B,+1 ldy l,+12 ; get DPB address in DPH 08CC+FD6E0C DB 0FDH,L*8+46H,+12 ldy h,+13 08CF+FD660D DB 0FDH,H*8+46H,+13 08D2 EB xchg 08D3 2A0000 lhld @scrbf 08D6 010D00 lxi b,labdpb 08D9 09 dad b 08DA 010F00 lxi b,15 ldir ; move dpb 08DD+EDB0 DB 0EDH,0B0H 08DF EB xchg ; hl points to psh byte (15) liyd @scrbf 08E0+FD2A DB 0FDH,2AH 08E2+0000 DW @SCRBF ldy a,+labhth+2 08E4+FD7E07 DB 0FDH,A*8+46H,+LABHTH+2 08E7 47 mov b,a ; save CP/M sectors per physical sector 08E8 0E00 mvi c,0 pshlp srlr a ; rolate LSB into [cy] 08EA+CB3F DB 0CBH,38H+A 08EC DAF208 jc psh1 08EF 0C inr c jr pshlp 08F0+18F8 DB 18H,PSHLP-$-1 08F2 71 psh1 mov m,c ; set PSH byte 08F3 23 inx h ; mode pointer to PSM 08F4 05 dcr b 08F5 70 mov m,b ; put in dpb JR PHYSEL7 08F6+1805 DB 18H,PHYSEL7-$-1 08F8 3E01 PHYSEL6:MVI A,1 08FA 325D0C STA SELERR ; FLAG A SELECT ERROR PHYSEL7: 08FD CD9F09 call done ; setup motor turn-off 0900 215E0C lxi h,selop 0903 3600 mvi m,false ; SELECT OPERATION IS OVER 0905 C9 ret physel3: 0906 CD730A CALL SELECT JRC PHYSEL6 ; ERROR IF NOT READY 0909+38ED DB 38H,PHYSEL6-$-1 090B CDF40B CALL HOME ;RESTORE HEAD TO TRACK 0 JRC PHYSEL6 090E+38E8 DB 38H,PHYSEL6-$-1 0910 0648 MVI B,01001000B ;STEP IN, NO UPDATE 0912 CD250C CALL TYPE$I 0915 CD250C CALL TYPE$I 0918 CD250C CALL TYPE$I 091B CD250C CALL TYPE$I ;STEP IN FOUR TIMES 091E CD210C call read$addr ; READ ADDRESS 0921 3A0000 lda @dstat 0924 E630 ANI 00011000B SHL 1 ;check for FDC error. JRNZ PHYSEL6 0926+20D0 DB 20H,PHYSEL6-$-1 0928 2A590C lhld cmode 092B 46 mov b,m 092C 23 inx h 092D 4E mov c,m 092E DB12 in fdcsec ;track number, from read-addr 0930 FE04 CPI 4 JRZ phy4s2 ; drive matches media... 0932+2828 DB 28H,PHY4S2-$-1 0934 FE02 CPI 2 JRZ phy4s3 ; media has half the tracks of drive 0936+283A DB 28H,PHY4S3-$-1 0938 FE01 CPI 1 JRNZ PHYSEL6 093A+20BC DB 20H,PHYSEL6-$-1 ; media has 1/4 tracks as drive... ; must be ST media in QT drive... setb 1,b ;make drive "QT" 093C+CBC8 DB 0CBH,1*8+B+0C0H setb 5,b ;make drive "DT" also 093E+CBE8 DB 0CBH,5*8+B+0C0H res 0,b ;make media non-QT 0940+CB80 DB 0CBH,0*8+B+80H res 5,c ;make disk "ST" and reconfigure 0942+CBA9 DB 0CBH,5*8+C+80H phy4s0: ; update mode bytes, check for changes... 0944 79 mov a,c 0945 AE xra m 0946 71 mov m,c 0947 2B dcx h 0948 4F mov c,a 0949 78 mov a,b 094A AE xra m 094B 70 mov m,b 094C B1 ora c ; NZ if either byte changed... 094D CA5509 jz PHYSEL4 0950 3EFF mvi a,0ffh 0952 320000 sta @rcnfg ;set "re-configure" flag so BIOS will get new DPB/XLAT PHYSEL4: 0955 CDF40B CALL HOME JRC PHYSEL6 0958+389E DB 38H,PHYSEL6-$-1 JR PHYSEL7 095A+18A1 DB 18H,PHYSEL7-$-1 phy4s2: ; drive tpi matches media, but force media modes bit 5,b 095C+CB68 DB 0CBH,5*8+B+40H jrz phy4s20 095E+2804 DB 28H,PHY4S20-$-1 setb 5,c 0960+CBE9 DB 0CBH,5*8+C+0C0H jr phy4s21 0962+1802 DB 18H,PHY4S21-$-1 phy4s20: res 5,c 0964+CBA9 DB 0CBH,5*8+C+80H phy4s21: bit 1,b 0966+CB48 DB 0CBH,1*8+B+40H jrz phy4s22 0968+2804 DB 28H,PHY4S22-$-1 setb 0,b 096A+CBC0 DB 0CBH,0*8+B+0C0H jr phy4s0 096C+18D6 DB 18H,PHY4S0-$-1 phy4s22: res 0,b 096E+CB80 DB 0CBH,0*8+B+80H jr phy4s0 0970+18D2 DB 18H,PHY4S0-$-1 phy4s3: ; use drive settings if possible... ; NOTE: this case would not normally exist on a Kaypro. ; must be at least a DT drive, non-QT media, so force that setb 5,b ;make drive "DT" 0972+CBE8 DB 0CBH,5*8+B+0C0H res 0,b ;make media non-QT 0974+CB80 DB 0CBH,0*8+B+80H bit 1,b ;test drive "QT" 0976+CB48 DB 0CBH,1*8+B+40H jrnz phy4s4 0978+2004 DB 20H,PHY4S4-$-1 res 5,c ;make media "ST" in DT drive 097A+CBA9 DB 0CBH,5*8+C+80H jr phy4s0 097C+18C6 DB 18H,PHY4S0-$-1 phy4s4: ; QT drive, so media must be DT... setb 5,c ;make media "DT" in QT drive 097E+CBE9 DB 0CBH,5*8+C+0C0H jr phy4s0 0980+18C2 DB 18H,PHY4S0-$-1 setup$rw: 0982 3E15 MVI A,21 ; 21 RETRYS FOR A READ/WRITE OPERATION 0984 32560C STA RETRYS 0987 2A0000 lhld @cmode 098A 23 inx h 098B 23 inx h 098C 22590C shld cmode 098F C9 ret read$fdc: 0990 CD8209 call setup$rw 0993 CD1C0B READ: CALL ACCESS$R ; START DRIVE AND STEP TO PROPER TRACK JRC ERROR 0996+3805 DB 38H,ERROR-$-1 0998 11889F lxi d,10011111$10001000B ; status mask + read command JR TYPE$II 099B+183A DB 18H,TYPE$II-$-1 099D AF error: xra a ; [NZ] to indicate error 099E 3C inr a 099F F5 done: push psw 09A0 3A5E0C lda selop 09A3 B7 ora a jrnz retrn 09A4+200F DB 20H,RETRN-$-1 09A6 3E00 mvi a,false ;motor off false 09A8 325500 sta motor$off setmot: 09AB 115700 lxi d,motoff 09AE 0E0F mvi c,15 ;15 seconds 09B0 0621 mvi b,dev0 ;I.D. 09B2 CD0000 call ?timot 09B5 F1 retrn: pop psw 09B6 C9 ret write$fdc: 09B7 CD8209 call setup$rw 09BA 2A590C WRITE: LHLD CMODE ; CHECK FOR HALF TRACK R/O bit 5,m ;see if drive is DT. 09BD+CB6E DB 0CBH,5*8+M+40H jrz ht0 09BF+2805 DB 28H,HT0-$-1 09C1 23 inx h bit 5,m ;see if media is not DT. 09C2+CB6E DB 0CBH,5*8+M+40H jrz ERROR ; R/O ERROR 09C4+28D7 DB 28H,ERROR-$-1 09C6 CD1C0B ht0: CALL ACCESS$R ; ACCESS DRIVE FOR WRITE JRC ERROR 09C9+38D2 DB 38H,ERROR-$-1 09CB DB10 in fdcstat 09CD 320000 sta @dstat ; save DISK STATUS BYTE 09D0 E640 ani 01000000b ; WRITE PROTECT BIT jrnz ERROR ; WRITE PROTECT ERROR 09D2+20C9 DB 20H,ERROR-$-1 09D4 11A8FF lxi d,11111111$10101000B ; status mask + write command TYPE$II: 09D7 2A590C lhld cmode 09DA 23 inx h 09DB 7E mov a,m 09DC E601 ani 1 ;sector offset 09DE 210000 lxi h,@sect ; GET SECTOR NUMBER 09E1 86 add m ;others use sectors 1-n 09E2 D312 OUT fdcsec ; give to controller RETRY: 09E4 D5 PUSH d ; save registers 09E5 CD3E0A CALL TYPE$II$COM ; execute disk transfer routine. 09E8 320000 STA @dstat ; save status of transfer 09EB AF XRA A ; CLEAR CARRY FOR DSBC lded @dma 09EC+ED5B DB 0EDH,5BH 09EE+0000 DW @DMA DSBC D ; HL NOW CONTAINS # OF BYTES TRANSFERRED 09F0+ED52 DB 0EDH,D*8+42H 09F2 3A0000 LDA @dstat ; check for successful transfer 09F5 E6FF ANI 11111111B ; WP is 0 for any read command. JRNZ IOERR ; RETRY IF ERROR 09F7+2016 DB 20H,IOERR-$-1 09F9 3A5E0C LDA SELOP ; IS THIS A SELECT OPERATION ? 09FC B7 ORA A jrnz POPRET ; THEN DON'T CHECK SECTOR SIZE 09FD+2009 DB 20H,POPRET-$-1 09FF 3A5C0C LDA BLCODE ; CHECK IF CORRECT NUMBER OF BYTES TRANSFERRED 0A02 FE03 CPI 3 JRNZ NOTED ; BLCODE=3 => 1024 BYTE SECTOR EXPECTED 0A04+2001 DB 20H,NOTED-$-1 0A06 3C INR A ; INCREMENT BECAUSE (H) FOR 1024 IS 4 0A07 BC NOTED: CMP H ; COMPARE TO EXPECTED SIZE POPRET: 0A08 D1 POP d 0A09 3E00 mvi a,0 ;signal "no error" to BDOS. jrz done ; RETURN IF CORRECT 0A0B+2892 DB 28H,DONE-$-1 JR TRYAGN ; RETRY IF INCORRECT 0A0D+1804 DB 18H,TRYAGN-$-1 IOERR: 0A0F C1 POP B 0A10 FA9D09 JM ERROR ; ERROR IF NO READY SIGNAL TRYAGN: 0A13 21560C LXI H,RETRYS ; decrement retry count 0A16 35 DCR M 0A17 CA9D09 JZ ERROR ; NO MORE RETRIES 0A1A 7E MOV A,M 0A1B FE0A CPI 10 0A1D D2E409 JNC RETRY ; LESS THAN TEN RETRYS LEFT => STEP HEAD 0A20 3A5E0C LDA SELOP 0A23 B7 ORA A 0A24 C2E409 jnz RETRY ; DO NOT STEP HEAD IF SELECT OPERATION 0A27 D5 PUSH d ; SAVE REGISTERS 0A28 CDDC0B CALL STEPIN ; STEP IN COMMAND 0A2B CD4B0B CALL SEEK ; SEEK WILL REPOSITION HEAD 0A2E D1 POP d 0A2F C3E409 JMP RETRY ; TRY AGAIN 0A32 80 rtbl: db 128 ;128 bytes 0A33 DF00 dw rd1 0A35 00 db 0 ;256 bytes 0A36 DF00 dw rd1 0A38 00 db 0 ;512 bytes 0A39 D900 dw rd2 0A3B 00 db 0 ;1024 bytes 0A3C CD00 dw rd4 type$II$com: ;command in E 0A3E 7B mov a,e 0A3F E620 ani 00100000b ; 1 if write 0A41 070707 rlc! rlc! rlc ; 0000000w 0A44 F6A2 ori 0a2h ;A2/A3 for INI/OUTI 0A46 32E100 sta rd12+1 0A49 32DB00 sta rd22+1 0A4C 32D500 sta rd32+1 0A4F 32CF00 sta rd42+1 0A52 CD430C call setside sspd savSTK ; 0A55+ED73 DB 0EDH,73H 0A57+A900 DW SAVSTK 0A59 31B300 lxi sp,rwSTK ; 0A5C 3A5C0C lda blcode 0A5F 4F mov c,a 0A60 87 add a ; *2 0A61 81 add c ; *3 0A62 21320A lxi h,rtbl 0A65 4F mov c,a 0A66 0600 mvi b,0 0A68 09 dad b 0A69 46 mov b,m 0A6A 23 inx h 0A6B 4E mov c,m 0A6C 23 inx h 0A6D 66 mov h,m 0A6E 69 mov l,c 0A6F E5 push h 0A70 C3B300 jmp type$II$ext SELECT: 0A73 0E00 mvi c,0 0A75 0621 mvi b,dev0 0A77 CD0000 call ?timot ;clear any pending "motor off" 0A7A 3A5600 lda selmsk 0A7D 57 mov d,a 0A7E 2F cma 0A7F 47 mov b,a 0A80 3A0000 LDA @rdrv ; get the RELATIVE drive number 0A83 4F MOV C,A ; relative drive number in (C) (rel. to driv0) 0A84 2A590C lhld cmode 0A87 23 INX H ; POINT TO MODE BYTE 2 0A88 3C inr a ; 1,2,3,4 0A89 2F cma ; 111111xx 0A8A A2 ana d ; 2,1,0,3 but avoid win reset bit bit 4,m ;single density ? 0A8B+CB66 DB 0CBH,4*8+M+40H jrnz se1 0A8D+2002 DB 20H,SE1-$-1 0A8F F620 ori 00100000b ;select single density data rate. se1: 0A91 2B dcx h ; point to mode byte 1 bit 1,m ; QT drive? 0A92+CB4E DB 0CBH,1*8+M+40H jrz se2 0A94+2804 DB 28H,SE2-$-1 bit 0,m ; QT media? 0A96+CB46 DB 0CBH,0*8+M+40H jrnz se3 ; motor "off" - low speed - for QT 0A98+2002 DB 20H,SE3-$-1 se2: 0A9A F610 ori 00010000b ;motor on, also (QT drive = high speed) se3: 0A9C 5F mov e,a 0A9D F3 di 0A9E DB14 in sysctl ; ; TODO: if motor bit changes for QT drive, must de-select briefly 0AA0 E68F ani 10001111b ; DDEN, clear MOTOR 0AA2 A0 ana b ; strip select bit(s) 0AA3 B3 ora e ; 0AA4 D314 out sysctl ; 0AA6 FB ei 0AA7 7E MOV A,M 0AA8 E60C ANI 00001100B ; setup steprate bits for seek-restore commands 0AAA 0F rrc 0AAB 0F rrc 0AAC 32550C STA STEPRA ; RATE FOR SUBSEQUENT SEEK/RESTORE 0AAF 215B0C LXI H,LOGDSK ; save position (track) of current drive 0AB2 5E MOV E,M ; in 'trks' array addressed by contents of 0AB3 71 MOV M,C ; location 'logdsk'. 0AB4 0600 MVI B,0 0AB6 50 MOV D,B 0AB7 21600C LXI H,TRKS 0ABA 19 DAD D 0ABB DB11 IN fdctrk 0ABD 77 MOV M,A ; SAVE CURRENT TRACK # 0ABE 21600C LXI H,TRKS ; identify position (track) of requested drive 0AC1 09 DAD B ; from 'trks' array addressed by new 'logdsk'. 0AC2 7E MOV A,M 0AC3 D311 OUT fdctrk ; set track number 0AC5 79 mov a,c 0AC6 93 sub e ;same drive as last time? 0AC7 D6019F sui 1 ! sbb a ;.true. if same drive 0ACA 2F cma 0ACB F3 di 0ACC 215500 lxi h,motor$off ;if diff. drive, must check ready. 0ACF B6 ora m ;if same but motor off, must check ready. 0AD0 36FF mvi m,true ;this prevents the motor from being turned off 0AD2 32640C sta mtflg ; test drive for ready. 0AD5 2FB7 cma ! ora a ;[NC] jrnz fb3 ;[NZ] if motor still on. 0AD7+201C DB 20H,FB3-$-1 ; 0AD9 3ED0 mvi a,11010000b 0ADB D310 out fdccomd 0ADD DB10 in fdcstat 0ADF 060A mvi b,10 ;must be ready within 10 rev. fb1: 0AE1 CDFA0A call find$NE 0AE4 116243 lxi d,IP$count 0AE7 DB10 fb2: in fdcstat 0AE9 E602 ani 00000010b jrnz got$IP 0AEB+200A DB 20H,GOT$IP-$-1 0AED 1B dcx d 0AEE 7B mov a,e 0AEF B2 ora d jrnz fb2 0AF0+20F5 DB 20H,FB2-$-1 djnz fb1 0AF2+10ED DB 10H,FB1-$-1 0AF4 37 stc 0AF5 FB fb3: ei 0AF6 C9 ret 4362 = IP$count equ 17250 ; 200mS +10%, timed to "fb2" loop got$IP: 0AF7 AF xra a 0AF8 FB ei 0AF9 C9 ret find$NE: 0AFA DB10 in fdcstat 0AFC E602 ani 00000010b 0AFE 4F mov c,a 0AFF 2604 mvi h,4 ;wait even longer... (3.67 sec) 0B01 110000 fb00: lxi d,0 ;wait a long time for any edge 0B04 DB10 fb01: in fdcstat 0B06 E602 ani 00000010b 0B08 B9 cmp c jrnz got$edge 0B09+200C DB 20H,GOT$EDGE-$-1 0B0B 1B dcx d 0B0C 7B mov a,e 0B0D B2 ora d jrnz fb01 0B0E+20F4 DB 20H,FB01-$-1 0B10 25 dcr h jrnz fb00 0B11+20EE DB 20H,FB00-$-1 0B13 D1 pop d ;discard address from "fb1" loop 0B14 37 stc 0B15 FB ei 0B16 C9 ret got$edge 0B17 B7 ora a 0B18 C8 rz 0B19 4F mov c,a ;if not NE, go find another jr fb00 0B1A+18E5 DB 18H,FB00-$-1 "3*(3( 3w# 1*(3~#3*(3 B>3*$3w#w3͵,,34/Ϳ,q3͵,,3Ϳ,Nm/3*(3~" 4#4#4͵,,3~Œ11K43.>13͵,,3~.>13*(3~ʹ1>31P43*(3!* ~!/ 2,3*(3|1( ^#V,,{z1z]22'3z(2:,324/q#2Nm/#2*(3|]2* ~]2=!'3Z2:,3ͨ/W2S2w:2^1>͵,,3|}3~> 3<3͵,,3|”2*$3w=3*(3$B*$3^#V6 +6 ++<3͵,,3> 3" N#F#~Ϳ,q#p#w>3͵,,3> 3* ~,! 2=2>! *(3" s#r#w=3* 3   }!m}6 4  >2l}*i}! 4#4#4~#N#F#y#x#:l}*i}!! :k}ʈ3]3G3:m}~G~#~O?3#~3! p! y ! q <33.3~3# !! 3! 6?  <04= _ ! x$4*4F N4wxG> O> G!$ q#p#6 R4"f}"i}2h}x2k}.32l}>3!h}~54m3ʘ4=4:k}4*i} <˜4G34*f} :k}O*i}:m}´4y O 4:k}G3*f}w# 4N3:l}4*i}! ]343*f} "f}g4:l}/g. >Gx|g}o5@5! 9 VzwzO#5<599! 9/GO~9O9~q+d5! 96 #=w5O! 9Fx7yҮ5! 9 ~WwzO+›55_ /! 9~#=557"n} >6*n}"p}56*p}"p}56*p} G! 9! xb6 ]6+/6$%? 'w#6-! 9~R7&7~#R77! 9~.87+60D70D76 #,7+r>o& 9y>o& 90w+i76.7w#Ì7 O~#¢7Gxڵ77 9> 79#7! 9! 97>? 'w#7! 9͛8! 9͛89!  y@88! 9o> g~18Gx8f848! 9! w# L898! 9! 9! '#s8! 9 ^{w{W#‡8 ~W8~+¶8ê87>? 'w# þ88  !9~#88! 99#8>/? 'w#•9'w#¦97>?'w##´9 ^{w{W#9 !9Ú=9999 ! 9MD^#V# + w9ȇ :):W f. 0:r~#fo0:s#r!>O @:)8:|W}_ W:|}o|gG:yx/Wy/_{zW{_e:yw# r:~#É:~#W #ÿ:F#"r}x;:*r}! 9G_> WObk++:~+:y~#//); ;=;);ɯo> g{ozg!<Ú=<<=!C{#z*aC*cC@xyx >c>_ !?^#Vͺ>]>>(_>y͖>>)_>|@>R>'?|L>R>ͺ>>B>,_>]>> _eA eA eA0:_>_>m>m>]>|{>}{> ڦ>dԨ> ͨ> ڳ>ê>xm>N #~_>ü>!?ͺ>*}! 9{_z>{> ?>]>>#_>*}>=^#V#͇>??>: "?>?_>!?ͺ> ͺ>>=_>^#V|W?}N?.))@ú>#F>A?> #r?~ >.?~ ?=c?^#V# File: Traceback: ???????@ ERROR FIXED OVERFLOW OVERFLOW UNDERFLOW ZERO DIVIDE END OF FILE UNDEFINED FILE KEY NULCONCONRDRPUNLSTBADG!C~N@3@B Condition Stack Overflow$4Ox !t} w#s#r#s#r! 9!C s#r!CN !t} +++++‡@#{ @#zʥ@++~Ç@++!C5! ~# ´@ð@!CN !t} +++++@#~#@+{@#z@++~@#^#V=!C~OA5:C_ !C^#V"CTC.~# !A*qC)))))C )| 6A*TC|}*D"XC:C*CTCw# \A*D{ vA zA! #"D ìACopyright (c) 1980 Digital Research, v1.3 ! "}"}"}2C2C*} A"} q#p##}o"}* }o|ABB+w+w+r+s4w#w#s#r <2}++*}s#r"}*}#"}*}DM!}x~¾B#~+¾B+F+Nq#p*}+"}ʹBҼB =oB!+ ~O~#~G !/ x—ByʴB >O6# ŽB   ~B =ɯ ~#fo++-B!}~#B*}$BBCBC  Insufficient Memory$ Invalid I/O List End of Execution$(C d  SYSIN SYSPRINT      30 INITDIR WILL ACTIVATE TIME STAMPS FOR SPECIFIED DRIVE.1Do you want to re-format the directory on drive: Do you want the existing time stamps cleared0Do you want to recover time/date directory space (Y/N)? YyABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzEnd of PASS 1. ERROR: INITDIR TERMINATED. Requires CP/M 3.0 or higher. Directory already re-formatted.Not enough room in directory. Wrong password.No time stamps present. Not enough available memory. Disk is READ ONLY. Cannot find last XFCB. 3Cannot re-format the directory with RSXs in memory. Unrecognized drive.Cannot select drive.! ABCDEFGHIJKLMNOPDRIVE: Enter Drive: : Directory is password protected.Password, please. > ACCESS$R: 0B1C 2A0000 lhld @dph 0B1F 110C00 lxi d,12 0B22 19 dad d 0B23 3E0F mvi a,15 ;PSH 0B25 86 add m 0B26 5F mov e,a 0B27 23 inx h 0B28 3E00 mvi a,0 0B2A 8E adc m 0B2B 57 mov d,a 0B2C 1A ldax d 0B2D 325C0C sta blcode ;get physical sector size 0B30 2A590C lhld cmode 0B33 4E mov c,m ; mode byte 2 0B34 23 inx h 0B35 7E mov a,m ; mode byte 3 0B36 2F cma ; get "NOT MDT... 0B37 A1 ana c ; ... AND DDT" 0B38 E620 ani 00100000b ; flag is in bit 5 bit 1,c ; drive QT? 0B3A+CB49 DB 0CBH,1*8+C+40H jrz accr0 ; no... 0B3C+2806 DB 28H,ACCR0-$-1 bit 0,c ; must be 0? 0B3E+CB41 DB 0CBH,0*8+C+40H jrnz accr0 ; 0B40+2002 DB 20H,ACCR0-$-1 0B42 F660 ori 01100000b ; set both just in case accr0: 0B44 32630C sta htflag ; half track flag 0B47 CD730A CALL SELECT 0B4A D8 rc SEEK: 0B4B 21570C LXI H,SEKERR ; initialize seek error counters 0B4E 3604 MVI M,4 ; 4 ERRORS ON SEEK IS FATAL 0B50 23 INX H 0B51 360A MVI M,10 ; RESTORE once, then 9 errors are fatal 0B53 CD430C call setside 0B56 3A0000 lda @trk 0B59 4F mov c,a RETRS: 0B5A 79 MOV A,C ; get track number back 0B5B B7 ORA A ; FORCES "RESTORE" IF "seek to track 0" 0B5C CAF40B jz HOME ;RESTORE HEAD TO TRACK 0 0B5F 3A630C lda htflag 0B62 67 mov h,a ; get half-track flag in h 0B63 DB11 IN fdctrk ;CURRENT HEAD POSITION, 0B65 91 SUB C ;SEE HOW FAR WE WANT TO GO. 0B66 C8 RZ ;IF ZERO TRACKS TO STEP, WERE FINISHED 0B67 0678 MVI B,01111000B ;ASSUME STEP-OUT + UPDATE + HEADLOAD JRNC STOUT ;ASSUMPTION WAS CORRECT... 0B69+3004 DB 30H,STOUT-$-1 0B6B 0658 MVI B,01011000B ;ELSE MUST BE STEP-IN NEG ;AND NUMBER OF TRACKS WOULD BE NEGATIVE 0B6D+ED44 DB 0EDH,44H 0B6F 6F STOUT: MOV L,A ;COUNTER FOR STEPING SEEK5: BIT 5,H ; CHECK FOR 48 TPI DISK IN 96 TPI DRIVE 0B70+CB6C DB 0CBH,5*8+H+40H JRZ NOTHT 0B72+281D DB 28H,NOTHT-$-1 RES 4,B ;SELECT NO-UPDATE 0B74+CBA0 DB 0CBH,4*8+B+80H 0B76 CD250C CALL TYPE$I ;STEP HEAD 0B79 E608 ANI 00000100B SHL 1 ;DID THIS STEP PUT US AT TRACK 0 ? JRNZ TRK0ERR 0B7B+2040 DB 20H,TRK0ERR-$-1 bit 6,h ; added bit for QT 0B7D+CB74 DB 0CBH,6*8+H+40H JRZ NOTQT 0B7F+280E DB 28H,NOTQT-$-1 0B81 CD250C CALL TYPE$I ;STEP HEAD 0B84 E608 ANI 00000100B SHL 1 ;DID THIS STEP PUT US AT TRACK 0 ? JRNZ TRK0ERR 0B86+2035 DB 20H,TRK0ERR-$-1 0B88 CD250C CALL TYPE$I ;STEP HEAD 0B8B E608 ANI 00000100B SHL 1 ;DID THIS STEP PUT US AT TRACK 0 ? JRNZ TRK0ERR 0B8D+202E DB 20H,TRK0ERR-$-1 NOTQT: SETB 4,B ;SELECT UPDATE TO TRACK-REG 0B8F+CBE0 DB 0CBH,4*8+B+0C0H 0B91 CD250C notht: CALL TYPE$I ;STEP HEAD 0B94 E608 ANI 00000100B SHL 1 ;DID THIS STEP PUT US AT TRACK 0 ? JRNZ TRK0ERR 0B96+2025 DB 20H,TRK0ERR-$-1 0B98 2D DCR L JRNZ SEEK5 0B99+20D5 DB 20H,SEEK5-$-1 0B9B DB12 IN fdcsec ;SAVE CURRENT SECTOR NUMBER 0B9D 6F MOV L,A 0B9E CD210C CALL READ$ADDR ; GET ACTUAL TRACK UNDER HEAD (IN SECTOR REG) 0BA1 DB12 in fdcsec ;GET TRACK NUMBER FROM MEDIA 0BA3 67 MOV H,A 0BA4 7D MOV A,L 0BA5 D312 OUT fdcsec ;RESTORE SECTOR NUMBER 0BA7 3A0000 LDA @dstat ;GET TRUE ERROR STATUS OF READ-ADDRESS 0BAA 07 RLC 0BAB D8 RC ;DRIVE NOT READY 0BAC E630 ANI 00011000B SHL 1 ; CRC ERROR + REC-N0B1C ACCESSR 0B44 ACCR0 034B ALV0 049C ALV1 05ED ALV2 0000 BC 0C5C BLCODE 081D CHKLAB1 0C59 CMODE 004B CSV0 014B CSV1 024B CSV2 0018 D0H 0031 D1H 004A D2H 0002 DE 0021 DEV0 099F DONE 0075 DPB0 0086 DPB1 0097 DPB2 0060 DPEH37 0000 DPHTBL 099D ERROR 0000 FALSE 0B01 FB00 0B04 FB01 0AE1 FB1 0AE7 FB2 0AF5 FB3 0010 FDC 0010 FDCCOMD 0013 FDCDATA 0012 FDCSEC 0010 FDCSTAT 0011 FDCTRK 0AFA FINDNE 0877 GF0 0866 GF1 0B17 GOTEDGE 0AF7 GOTIP 0895 GS0 08A7 GS1 089D GS2 08AB GS3 08B5 GS4 08B9 GS6 0004 HL 0BF4 HOME 0C07 HOME0 0C11 HOME1 09C6 HT0 0C63 HTFLAG 073E INIT 074F INIT0 0780 INITQT 076A INITST 0A0F IOERR 4362 IPCOUNT 0785 IQT0 076F IST0 0004 IX 0004 IY 000D LABDPB 0004 LABEL 0005 LABHTH 0019 LABLEN 0000 LABVER 0C5B LOGDSK 0796 LOGIN 07BC LOGIN1 0001 MODE2S 0C5F MODFLG 003D MODTBL 0057 MOTOFF 006C MOTOFF0 0055 MOTOROFF 0C64 MTFLG 0003 NDEV 0858 NF1 087D NF2 087D NF3 0A07 NOTED 0B91 NOTHT 0B8F NOTQT 0944 PHY4S0 095C PHY4S2 0964 PHY4S20 0966 PHY4S21 096E PHY4S22 0972 PHY4S3 097E PHY4S4 07C3 PHYSEL 0813 PHYSEL1 0836 PHYSEL2 0906 PHYSEL3 0955 PHYSEL4 08F8 PHYSEL6 08FD PHYSEL7 0A08 POPRET 08F2 PSH1 08EA PSHLP 0C29 PUTI 00E7 RD0 00DF RD1 00E0 RD12 00D9 RD2 00DA RD22 00D3 RD3 00D4 RD32 00CD RD4 00CE RD42 0993 READ 0C21 READADDR 0990 READFDC 0BC3 RESTR0 0BD1 RESTR1 09B5 RETRN 0B5A RETRS 09E4 RETRY 0C56 RETRYS 0A32 RTBL 0BB6 RTS00 00B3 RWSTK 00A8 SAVNMI 00A9 SAVSTK 0A91 SE1 0A9A SE2 0A9C SE3 0B4B SEEK 0B70 SEEK5 0C57 SEKERR 0A73 SELECT 0C5D SELERR 0056 SELMSK 0C5E SELOP 0886 SETMODE 09AB SETMOT 0C43 SETSIDE 0982 SETUPRW 0BDC STEPIN 0C55 STEPRA 0B6F STOUT 0016 STRING 0014 SYSCTL 0106 THREAD 0BBD TRK0ERR 0C60 TRKS FFFF TRUE 0A13 TRYAGN 0C25 TYPEI 09D7 TYPEII 0A3E TYPEIICOM 00B3 TYPEIIEXT 6530 VERS 0C2B WB 0C30 WNB 09BA WRITE 09B7 WRITEFDC 0000 ?BNKSL 0000 ?GETDP 0000 ?HALLOC 0000 ?TIMOT 0000 @CMODE 0000 @DBNK 0000 @DIRCB 0000 @DMA 0000 @DPH 0000 @DSTAT 0000 @DTACB 0000 @RCNFG 0000 @RDRV 0000 @SCRBF 0000 @SECT 0000 @SIDE 0000 @TRK 0C1C @TRK0  6730 = vers equ '0g' ; January 20, 1986 11:06 drm "CRT.ASM" ;******************************************************** ; CRT module for the KAYPRO * ; Copyright (C) 1985 Douglas Miller * ;******************************************************** maclib Z80 0000 = false equ 0 FFFF = true equ not false 0000 = external equ false ;actual driver in EPROM? 00C8 = dev0 equ 200 0001 = ndev equ 1 0014 = sysctl equ 014h ;status/ctrl bits if not external 0020 = line25n equ 00100000b 001C = crtadr equ 1ch 001C = vidctl equ crtadr 001D = crtreg equ 1dh 001F = viddat equ 1fh 0004 = sio1 equ 4 0005 = keyb equ sio1+1 ; CRTC register addresses 000A = curst equ 10 000B = curen equ 11 000C = startH equ 12 000D = startL equ 13 000E = cursrH equ 14 000F = cursrL equ 15 0012 = ramioH equ 18 0013 = ramioL equ 19 001F = nulla equ 31 0004 = ctrlD equ 4 0007 = bell equ 7 0008 = bs equ 8 000A = lf equ 10 000B = ctrlK equ 11 000C = ff equ 12 000D = cr equ 13 0017 = ctrlW equ 23 0018 = ctrlX equ 24 001A = ctrlZ equ 26 001B = esc equ 27 001E = rs equ 30 endif extrn @ctbl,@vect cseg ;common memory, other parts in banked. 0000 3900 dw thread 0002 C801 db dev0,ndev 0004 C30800 jmp init 0007 C32800 jmp nullst 000A C32500 jmp nullin 000D C32800 jmp nullst 0010 C32B00 jmp output 0013 1900 dw strcrt 0015 0000 dw tblcrt 0017 3500 dw modcrt 0019 4B41595052strcrt: db 'KAYPRO ',0,'CRT driver ',0,'v3.10' 0032 3067 dw vers 0034 24 db '$' 0035 00008000 modcrt: db 00000000b,00000000b,10000000b,0 0039 = thread equ $ dseg ;banked memory. tblcrt: ;initial value only, copied by BIOS to its table. 0000 4352542020 db 'CRT ',00000010b,0 ;Output, no baud, no protocal init: if not external 0008 213209 LXI H,escflg 000B 060C MVI B,12 000D AF XRA A 000E 77 L06E0 MOV M,A 000F 23 INX H DJNZ L06E0 0010+10FC DB 10H,L06E0-$-1 0012 2A4100 lhld 0041h ;gifts from the loader... 0015 223309 shld line 0018 2A4400 lhld 0044h ; 001B 223609 shld curpos 001E 2A4600 lhld 0046h ; 0021 223809 shld starta endif 0024 C9 ret 0025 3E1A nullin: mvi a,1ah 0027 C9 ret 0028 F6FF nullst: ori true 002A C9 ret ; return true if ready if external output: di in sysctl ani 10111111b ori 10000000b out sysctl call 0045h in sysctl ani 00111111b out sysctl ei ret else ;internal CRT driver code: ;CTR controlling code 002B 3A3209 output: LDA escflg 002E B7 ORA A 002F C27502 JNZ L09CB ;ESC codes 0032 79 MOV A,C 0033 B7 ORA A 0034 C8 RZ ;ignore nulls 0035 FA5C00 JM L07AE ;Block graphics 0038 FE20 CPI ' ' 003A DAF402 JC L0A44 ;CTRL codes ;Displayable char 003D 79 L078F MOV A,C LDED curpos 003E+ED5B DB 0EDH,5BH 0040+3609 DW CURPOS 0042 CD4202 CALL L0998 0045 CD4E02 CALL L09A4 ;advance cursor 0048 3A3409 L079A LDA column 004B 3C INR A 004C FE50 CPI 80 004E D2A500 JNC L07F7 ;wrap 0051 323409 STA column LDED curpos 0054+ED5B DB 0EDH,5BH 0056+3609 DW CURPOS 0058 13 INX D 0059 C3C300 JMP L0815 ;Block graphics codes 005C 3A3509 L07AE LDA attrib 005F E610 ANI 00010000b JRZ L078F ;normal char 0061+28DA DB 28H,L078F-$-1 0063 3A4A09 LDA LFD8C 0066 E640 ANI 01000000b JRZ L07C3 0068+2807 DB 28H,L07C3-$-1 006A 79 MOV A,C 006B E601 ANI 00000001b 006D 324A09 STA LFD8C 0070 C9 RET 0071 3A4A09 L07C3 LDA LFD8C 0074 B7 ORA A 0075 79 MOV A,C JRZ L07CB 0076+2801 DB 28H,L07CB-$-1 0078 2F CMA 0079 F680 L07CB ORI 10000000b LDED curpos 007B+ED5B DB 0EDH,5BH 007D+3609 DW CURPOS 007F CD4202 CALL L0998 0082 3A4A09 LDA LFD8C 0085 4F MOV C,A 0086 3A3509 LDA attrib 0089 B1 ORA C 008A CD5102 CALL L09A7 008D 3E40 MVI A,01000000b 008F 324A09 STA LFD8C JR L079A ;advance cursor pos 0092+18B4 DB 18H,L079A-$-1 0094 2A3609 L07E6 LHLD curpos 0097 3A3409 LDA column 009A 5F MOV E,A 009B AF XRA A 009C 57 MOV D,A 009D 323409 STA column DSBC D 00A0+ED52 DB 0EDH,D*8+42H 00A2 EB XCHG JR L0815 00A3+181E DB 18H,L0815-$-1 ;wrap to next line 00A5 CD9400 L07F7 CALL L07E6 ; 00A8 3A3309 L07FA LDA line 00AB FE17 CPI 23 JRC L0809 00AD+3808 DB 38H,L0809-$-1 00AF FE18 L0801 CPI 24 00B1 C8 RZ 00B2 CD3801 CALL L088A JR L080D 00B5+1804 DB 18H,L080D-$-1 00B7 3C L0809 INR A 00B8 323309 STA line 00BB 2A3609 L080D LHLD curpos 00BE 115000 LXI D,80 00C1 19 DAD D 00C2 EB XCHG 00C3 7A L0815 MOV A,D 00C4 E607 ANI 00000111b 00C6 57 MOV D,A 00C7 EB XCHG 00C8 223609 SHLD curpos LBCD starta 00CB+ED4B DB 0EDH,4BH 00CD+3809 DW STARTA DSBC B 00CF+ED42 DB 0EDH,B*8+42H JRNC L0829 00D1+3004 DB 30H,L0829-$-1 00D3 110008 LXI D,2048 00D6 19 DAD D 00D7 09 L0829 DAD B 00D8 EB XCHG 00D9 011C0E LXI B,crtadr + (cursrH shl 8) 00DC C32F02 JMP L0981 00DF 3A3309 L0831 LDA line 00E2 FE18 CPI 24 00E4 C8 RZ 00E5 B7 ORA A 00E6 C8 RZ 00E7 3D DCR A 00E8 323309 STA line 00EB 2A3609 LHLD curpos 00EE 115000 LXI D,80 DSBC D 00F1+ED52 DB 0EDH,D*8+42H 00F3 EB XCHG JR L0815 00F4+18CD DB 18H,L0815-$-1 00F6 3A3409 L0848 LDA column 00F9 B7 ORA A JRNZ L085D 00FA+200F DB 20H,L085D-$-1 00FC 3A3309 LDA line 00FF B7 ORA A 0100 C8 RZ 0101 FE18 CPI 24 JRZ L0868 0103+2811 DB 28H,L0868-$-1 0105 3D DCR A 0106 323309 STA line 0109 3E50 MVI A,80 010B 3D L085D DCR A 010C 323409 STA column LDED curpos 010F+ED5B DB 0EDH,5BH 0111+3609 DW CURPOS 0113 1B DCX D JR L0815 0114+18AD DB 18H,L0815-$-1 0116 3E4F L0868 MVI A,79 0118 323409 STA column 011B 2A3609 LHLD curpos 011E 114F00 LXI D,79 0121 19 DAD D 0122 EB XCHG JR L0815 0123+189E DB 18H,L0815-$-1 0125 3A3409 L0877 LDA column 0128 FE4F CPI 79 012A D2A500 JNC L07F7 LDED curpos 012D+ED5B DB 0EDH,5BH 012F+3609 DW CURPOS 0131 13 INX D 0132 3C INR A 0133 323409 STA column JR L0815 0136+188B DB 18H,L0815-$-1 0138 C33003 L088A JMP L0A8C ;set modes 013B 213509 L088D LXI H,attrib 013E 79 MOV A,C 013F D630 SUI '0' JRZ L08AB 0141+2816 DB 28H,L08AB-$-1 0143 3D DCR A JRZ L08B0 0144+2818 DB 28H,L08B0-$-1 0146 3D DCR A JRZ L08B5 0147+281A DB 28H,L08B5-$-1 0149 3D DCR A JRZ L08BA w 'x Fwwww5x www x wwwwwwwwGw ww xxw xxww x xO:( ù*  :(n` ~#foͤ2(O "(}:(O*( "(2("(:(O:(G2(!(w* ~zWw+ !z?#~*! * * G! O~2(~m͗O~t>2(?:(2(O:(w:Ғ4~:(w?r##rp# ä |g}oì*g(  #G ¾1*q(:(*w***> r ) .:(O! *c(:(Oͫ}@2æ  ~á *g(:(o$* ~K6 ?~wKw**i({#zir+s{ozg*(*(|g͸*u(*(   R>22Z$w*q(>ww:(c( *(#*i(s#r*:(!(:G~#<*q(#~!;(!(!(!~6 k! "2(*q(N1q*{(]*{([*y(}<^#V(t6 ^#V}e ^#V#~2(>â9͆>! "(*y(³*(X)*ÿ͂"*g(* K! ~<:wb##>w#w> r !~#!8>8> t>nͦv8 ~*o(wn:(r :(/GyOOA +¬ ¢y2(:(x¹o& :(W>OͫE:(ڟ?N/*"(y2ͦ+>2( ̀2(k,º ʺ*(*iҺ@:O ~2(~WW:2(Ôyʛ?ʔx ʔ |̷ÔN͆G:(<2(x# W:(<­:2(2 G?>Gr x~:(2(Ô##~*$*">2>2: *(~w *" 2(>ʄ@~k:((s~*9~Ês~ ~ͅ<Eʀ@~›:(6!¦w͚ ̋,ÇPY*({zBKNyʺ Nú # #>? ;*~ w-xąH"(0 *(#ĊH( ,ˆʀHÈ2(xą  ):(@O~#w͚ʀô̓-b_++V@* )͗Os++r ! x>w~6 :(6~#+w#w+ ~;wɯ2 K,OFq-yl?Np g&:(ʓ~†wŒ~è# # x ͗w w@ ~wb͐Ú!"*>o+"v- *!b("": r#~?w#>r# L=J! Lv  w,b ?~O ͆=: <>w##~2( 4~?̓-¹:(<üAX2(r K:(w++~=wv 4͗O5:(2(X:(!(v q: v v Mڂ?Ͷ >T͓Â! "(>(Â:(G:(O:(h=2(7ryy/W!(:(lڈ>F6:(_/G:(ʧ:(ڨ|OͤG:(_O zW{|:(*(}|BKN zyG:( 2(9:(>#:(>#*+S!X:(ڜq: ʺ!((ʵ>2(  ͤ2( O DM͸}>r "("(2(:(2(* :(:(FsO s#r:(„y==„*(!(^W*y(^#Vx+7=2(wͼկw#KWK*("(J T͞*(:( ["(Ͷ:(WMںʛ>(úͶ >TJ:(!(ʷ ͞x!(w4 PWP  Â*!! ~~#~O~#G~.|°! w:ck[! x?[! ~ʤ͆[͗PPv qO-á=.: <ʰ! Vq##~_@w: <œ. ʩ.ʩA r r##s <}r  cN ! ~态O> G~G! ~G~o> _yW#x#W{s+p+q7r#r#r>@  > 2  !! q#p#w2(wW* ._3ҫ -!(s:(!(xQ*q(~wɯ2(2(ù* ~2(~w#~2(~wZ! ""2(=2*~2(=2(2(k:*wX/ 6 X*̀ !~$6 :03i"!~6 * .>=)Q!(QX<k*{(}<^#V{! ~! _*o(~s̓  2@ !()#w*~"!!(Fw̓ :(w̚":>#2(̓ *~wć"#Fx T]## #~ ȷ   *4 # '  4 !(  *~^ ^ 33G# P v :dv 6  y #*~w> 2 *p@! ~*"v@*w# ) 6 # ͙   ! N)@ u :G*g(` ~!x_<_@!*o(y<:(/G?~##~? 6!K@?F6 ##N6  2 p##q:r !Z$2! "ög:(2T͐-:ʹ!>2<2(!!(w: >2(*6 !O~2(+A@2! ͚A=: <%~?¯"k "?~?ʾ"ZT͐"*>o"͒"!:O"(Ý"}-6͚͚c2(ZT͐-3#͗#@!Y#sY#̓ Y# Y#ͅ:(As#:(@#@!#$̓ —#>2—#͇ͱ * «#>2(͙ wB p'+!#:(w͚AP{" 2! W>O2 ø }-R* .)$:(r "ök*w()$*c()$-}-ͤÀk*s(" :(;$:r 2͚ù͚͚}/_|/* .W}_*c(" .}o|g"c(>2({2{2g*w( ʪ$Ң$Þ$+}$*(#}o|g:(O *s#r#w!~w/~@w//Hͥ* .>=)%_g:0%w:- %:(<%R$Hͥ:(>(~c!o#~E%^#V)$G#~#~!%~ b%% k%%##N#F#^#V#~#fo~o! o#~>T}! 6 **# K" G*~ xr ͐-xą@ 7(͚S!ʀq&& ͋"&@6,͚%Xͤ͋&͗wO~<:( g&~w#w#6 ##)͋&@ *  g&~?G++N͆p# Þ&͐*6!¿&?~p*6 &>2ͱ  !  !  ͷ w*o(w' ͧ B pͧ ,Úgsr ͐-͜ ͤ !S')_' ͤ̓ ~?w͐s-?F͜p!'̓ ¡'>2ͱ ?~¾'¾''''>w'͙ =2(͜!:(wÚ~̓ ʑ'pá'!(6 N N!(r )!( N ! )z<*)$"!" :X(*:(w :(w#:(w*2* }D #cdfg !"()  *{(X)^#V!"(:(<)! ~<<)^#V*(<)"("(x+)!(*(>X)*{()Q*:(_2({2(Ē*"(͂"X*~<)ҍ) -)a*ʚ)~)6 *(:(X*)!(:(T>q*k)!(:()-6>)ʴ+>2d,:+#++>29+2~2#! , , ,)x,) ,O +"!w [,O?WGzO:(V,xGyOG,xw q*}(}2*i(^#V+ d,!( K*}(@+*)):( K:(ڗ>2#-×:#-<)2#-*( ! ""++"(29- C-%w*{(}<^#Vz!(c-! >c-! J-w*q(~69!͐9b BI$"" HB @  UUUUUUUUUUUUUUUUUAPD A$! @ I  !@ D @BDI@ !B$ @$I$$ "@$$@@HHB D"D$H D@!IB@ A"B HBIB$$ " $ D$! "D$H$D$I@D BD" H$BHHBDHB"H!"!!$$HH !"BB$HHDA! " D"H $B!$! AI!$ $ H  H  A$I! I " $$BD"$H "AHD @  I  B" $$H @@@@" BHB  !I$ @ $@$ "$AI$$IBI$I H@ @I!$DA $ $@$ !$ !!" !$I@I $@ $ @! H"BI"HI DI HA DD$HH $  B D$ "I$I$H$ I !  $I$I$I $@HD$ @  !$"A$A D BI D B  @$$D D""I $BHI$IB ! @"BD B BD "@B @$ $BI I B$@" ! " H !$B I$ D@! !$  @ H!$$ D"@A @ DHII  D@@ $ DHI"D$ @  $ "" @ B!  @@D $$A$ $D "@I $A$$I!HI$ BA$ $DH $I$I"HI$I!$D B$"B I$$I$ !I$@DBB$@D@"I A!$ @  @  " $ $I$I$ B ! $@ I @I$ HBDH$ A$H!$D$ $I" B IIBB"$B@DH "$$ IH $$ !I"A D B!B     BI$A$"@$I $!!""@H! $ ! @I $  \ ͂ 2wQ :w$ *wM B :wB *wM͞ \ ͂ 2w:wQ *wM͞ !L6!J6 :L :LH:LH Jt:J b.bLb:KH͜+"p!r6:K!r *pNI*p#"p!r4¹    :J !26:J !16\ !t1, ð CP/M Version 3.0Copyright 1998, Caldera, Inc. 101198 654321  ; Z x 0NSun$Mon$Tue$Wed$Thu$Fri$Sat$ : : Enter today's date ($YY-MM-DD): $DD/MM/YY): $MM/DD/YY): $ Enter the time (HH:MM:SS): $ Press any key to set time $ Strike key to set time$ ERROR: Requires CP/M3.$ERROR: Illegal time/date specification.$1, 1, " * }! /* |! H1 " 1 X " :] C9:] C6i * DM  ͼ :3o& " !] 6 :] Gͼ :] SLWiÀWzÀ.7  ,Ð -Œ5 *> !6 . 7 ,ó -¯! "N  "P !R 6 *P ~2\ ͕.*  , -L .7 *, -5 *> !6 y. 7 ,& -"! "N  "P !R 6 *P ~2\  L+o& " .* ## ,m -iF2 L.  ,Ï -‹! 6 O LNo& " .*  , -¿e2 LCLmLC1, LCv     !, q*, &  !. p+q*-   !0 p+q*/           !1 6 #6 1 1 !S q:R <2R O *P :S w!U p+q*T ~$ʯ*T :R <2R O *P w*T #"T Ç!V q:V 0Oj!W q:W OͰ:W OͰ!X q*X M;:j!Y q*Y & ! g KͰ*Y & ! g MͰ!Z q*Z M/j![ q*[ M-j:\ ::R H!\ 6 :R <2R O *P ~2\ :\ i1[:\ 0 !^ s+q!_ 6 [jڋj:_ ʟ:_ :_ H2_ Ҹ:\ 0!_ w1Ë!] :_ #~!_ H:_ !b s+q+q[!` :\ 1*a M*b s!d s+q:c 2e :c  *d & ) >;ͱ HP:e =:e *f ! g !h s*f i "f :h !i q*i & ! g ))))*i & i }Wc s2l - =2j :j 2q !p 6*j &  ~2p -*p 2k ×WLs2k / =2j :j 2q "!p 6/*j &  ~2p :p !k </c 2l × s=2j :j 2q n!p 6{*j &  ~2p /*p 2k /c 2l :l Nҧ:l d2l :k !q :l  H*j & ) :l N_ !m͆ _ *k &  N͚ *l M*j014A+281C DB 28H,L08BA-$-1 014C 3D DCR A JRZ L08BF 014D+281E DB 28H,L08BF-$-1 014F 3D DCR A JRZ L08C9 0150+2825 DB 28H,L08C9-$-1 0152 3D DCR A JRZ L08D7 0153+2830 DB 28H,L08D7-$-1 0155 3D DCR A JRZ L08DE 0156+2834 DB 28H,L08DE-$-1 0158 C9 RET ;Rev Vid 0159 7E L08AB MOV A,M 015A F601 ORI 00000001b 015C 77 MOV M,A 015D C9 RET 015E 7E L08B0 MOV A,M 015F F602 ORI 00000010b 0161 77 MOV M,A 0162 C9 RET 0163 7E L08B5 MOV A,M 0164 F604 ORI 00000100b 0166 77 MOV M,A 0167 C9 RET 0168 7E L08BA MOV A,M 0169 F608 ORI 00001000b 016B 77 MOV M,A 016C C9 RET ;Cursor on 016D 0E60 L08BF MVI C,01100000b ; 016F 3E0A L08C1 MVI A,curst 0171 D31C OUT crtadr 0173 79 MOV A,C 0174 D31F OUT viddat 0176 C9 RET ;Vid Mode 0177 3A3509 L08C9 LDA attrib 017A F610 ORI 00010000b 017C 323509 STA attrib 017F 3E40 MVI A,01000000b 0181 324A09 STA LFD8C 0184 C9 RET 0185 2A3309 L08D7 LHLD line 0188 223B09 SHLD LFD7D 018B C9 RET 018C 3A3509 L08DE LDA attrib 018F F620 ORI 00100000b 0191 323509 STA attrib 0194 C9 RET ;reset mode 0195 213509 L08E7 LXI H,attrib 0198 79 MOV A,C 0199 D630 SUI '0' JRZ L0905 019B+2816 DB 28H,L0905-$-1 019D 3D DCR A JRZ L090A 019E+2818 DB 28H,L090A-$-1 01A0 3D DCR A JRZ L090F 01A1+281A DB 28H,L090F-$-1 01A3 3D DCR A JRZ L0914 01A4+281C DB 28H,L0914-$-1 01A6 3D DCR A JRZ L0919 01A7+281E DB 28H,L0919-$-1 01A9 3D DCR A JRZ L091D 01AA+281F DB 28H,L091D-$-1 01AC 3D DCR A JRZ L0922 01AD+2821 DB 28H,L0922-$-1 01AF 3D DCR A JRZ L0934 01B0+2830 DB 28H,L0934-$-1 01B2 C9 RET 01B3 7E L0905 MOV A,M 01B4 E6FE ANI 11111110b 01B6 77 MOV M,A 01B7 C9 RET 01B8 7E L090A MOV A,M 01B9 E6FD ANI 11111101b 01BB 77 MOV M,A 01BC C9 RET 01BD 7E L090F MOV A,M 01BE E6FB ANI 11111011b 01C0 77 MOV M,A 01C1 C9 RET 01C2 7E L0914 MOV A,M 01C3 E6F7 ANI 11110111b 01C5 77 MOV M,A 01C6 C9 RET ;Cursor off 01C7 0E20 L0919 MVI C,00100000b JR L08C1 01C9+18A4 DB 18H,L08C1-$-1 01CB 7E L091D MOV A,M 01CC E6EF ANI 11101111b 01CE 77 MOV M,A 01CF C9 RET ;restore cursor pos 01D0 2A3B09 L0922 LHLD LFD7D 01D3 7C MOV A,H 01D4 C620 ADI ' ' 01D6 323D09 STA LFD7F 01D9 7D MOV A,L 01DA C620 ADI ' ' 01DC 323F09 STA LFD81 01DF C3EB01 JMP L093D 01E2 3A3509 L0934 LDA attrib 01E5 E6DF ANI 11011111b 01E7 323509 STA attrib 01EA C9 RET ;direct cursor control 01EB 210000 L093D LXI H,0 01EE 4D MOV C,L 01EF 3A3F09 LDA LFD81 01F2 D620 SUI ' ' 01F4 D8 RC 01F5 47 MOV B,A JRZ L0953 01F6+2809 DB 28H,L0953-$-1 01F8 FE19 CPI 25 01FA D0 RNC 01FB 115000 LXI D,80 01FE 19 L0950 DAD D DJNZ L0950 01FF+10FD DB 10H,L0950-$-1 0201 5F L0953 MOV E,A 0202 3A3D09 LDA LFD7F 0205 D620 SUI ' ' 0207 D8 RC 0208 FE50 CPI 80 020A D0 RNC 020B 4F MOV C,A 020C 323409 STA column 020F 7B MOV A,E 0210 323309 STA line 0213 09 DAD B LDED starta 0214+ED5B DB 0EDH,5BH 0216+3809 DW STARTA 0218 19 DAD D 0219 EB XCHG 021A C3C300 JMP L0815 021D 011C12 L096F LXI B,crtadr + (ramioH shl 8) 0220 CD2F02 CALL L0981 0223 0D DCR C 0224 3E1F MVI A,nulla OUTP A 0226+ED79 DB 0EDH,A*8+41H L097A INP A 0228+ED78 DB 0EDH,A*8+40H 022A B7 ORA A 022B F22802 JP L097A 022E C9 RET L0981 OUTP B 022F+ED41 DB 0EDH,B*8+41H 0231 0C INR C OUTP D 0232+ED51 DB 0EDH,D*8+41H 0234 0D DCR C 0235 04 INR B OUTP B 0236+ED41 DB 0EDH,B*8+41H 0238 0C INR C OUTP E 0239+ED59 DB 0EDH,E*8+41H 023B C9 RET 023C CD1D02 L0992 CALL L096F 023F DB1F IN viddat 0241 C9 RET 0242 F5 L0998 PUSH PSW 0243 7A MOV A,D 0244 E607 ANI 7 0246 57 MOV D,A 0247 CD1D02 CALL L096F 024A F1 POP PSW 024B D31F OUT viddat 024D C9 RET 024E 3A3509 L09A4 LDA attrib 0251 E5 L09A7 PUSH H 0252 F5 PUSH PSW 0253 CD6902 CALL L09BF 0256 CD1D02 CALL L096F 0259 F1 POP PSW 025A D31F OUT viddat 025C EB XCHG 025D E1 POP H 025E C9 RET 025F E5 PUSH H 0260 CD6902 CALL L09BF 0263 CD3C02 CALL L0992 0266 EB XCHG 0267 E1 POP H 0268 C9 RET 0269 210108 L09BF LXI H,0801h 026C 19 DAD D 026D 7C MOV A,H 026E E607 ANI 7 0270 F608 ORI 8 0272 67 MOV H,A 0273 EB XCHG 0274 C9 RET ;ESC sequences 0275 213209 L09CB LXI H,escflg 0278 3600 MVI M,0 027A FE01 CPI 1 JRNZ L09ED 027C+2019 DB 20H,L09ED-$-1 027E 79 MOV A,C 027F E67F ANI 01111111b 0281 FE52 CPI 'R' 0283 CAAA04 JZ L0C06 0286 FE45 CPI 'E' 0288 CA4105 JZ L0C9D 028B FE41 CPI 'A' 028D C8 RZ 028E FE47 CPI 'G' 0290 C8 RZ 0291 323A09 STA LFD7C 0294 3602 MVI M,2 0296 C9 RET ;more than 1 in sequence 0297 FE02 L09ED CPI 2 JRNZ L0A05 0299+2014 DB 20H,L0A05-$-1 029B 3A3A09 LDA LFD7C 029E FE42 CPI 'B' 02A0 CA3B01 JZ L088D 02A3 FE43 CPI 'C' 02A5 CA9501 JZ L08E7 02A8 79 MOV A,C 02A9 323F0֎ % a3S h 9 d Xx  x x` j K J"x C)Ce9 ab0Ā  . !   01^w EED@ 8 dL:A+vu< 6[,܄Ch<Z e]la05 s J s s˘2A,J [E { -`nBdxYD|@dUGX$+K P u_q!d3q`<c0V6  Y+X%K.  X8a!3  v@eEX$"P ;JN4uV x"=c0@z2Ɓ.6 xHD 4 Z[!1l<`!ơ'P@hz(EJ= $ '?=vI;A)<5 {X$|@dHK$uB^5 dqI0P@xz(E`?9vI;Ogݒ~s=p0?9vH= >,~`#joK$B GX% l e( !|uBZ'IeA.8 {  3qx4|v]2]c ;H ieàM%zs:i#jzsH7ãL8-Z aL:yim0>aώ`9[>= 0>ãL8-[ aZaL:>À} <,XZd `:Őm,> 0iO-0aqn@ vta}41+s;l8yf CL8|{aL8}iGq[#l><4Ç!<Çt|i 0V+ g 6Ëwdt [["im`,`DuI I3 ґ3]p) b !n)4C'0G>I7 3qJ ˭ !5sO`9\*  |srk0@ "EX%Ҁbp'0] =:a/cKyHD [JG0 ^*.^8 [HC x [HG0%`I#D( $ɢp'0 gf@1V6 wichO % rvC*#h_ ґ+EX% "n!16@J |s,pa0XP*ih@i*!xP O`9\ >9w[! #Mpp  hO$0 |snc@x bm` Y$0?Y$uBZss ,t{( 8 Q@?Y $?X$K @2~+]<ƀw֩ !J,t 㬂dK-@nid x`n:!+v ,:A"[ȁ, cY $^Gd `:A$qC X=D fvH C #J0d0yuT+rP;l>zr7%ZaH8fph>46qnߡp4çp0l8yaP{L>+>-D fJeFX$U]l= T5D$ @VECT 9 STA LFD81 02AC 3603 MVI M,3 02AE C9 RET ;more than 2 in sequence 02AF FE03 L0A05 CPI 3 JRNZ L0A22 02B1+2019 DB 20H,L0A22-$-1 02B3 79 MOV A,C 02B4 323D09 STA LFD7F 02B7 3A3A09 LDA LFD7C 02BA FE3D CPI '=' 02BC CAEB01 JZ L093D 02BF FE2A CPI '*' 02C1 CA4506 JZ L0DA1 02C4 FE20 CPI ' ' 02C6 CA4C06 JZ L0DA8 02C9 3604 MVI M,4 02CB C9 RET ;more than 3 02CC FE04 L0A22 CPI 4 JRNZ L0A2D 02CE+2007 DB 20H,L0A2D-$-1 02D0 79 MOV A,C 02D1 324009 STA LFD82 02D4 3605 MVI M,5 02D6 C9 RET ;5 sequential char 02D7 79 L0A2D MOV A,C 02D8 323E09 STA LFD80 02DB 3A3A09 LDA LFD7C 02DE FE4C CPI 'L' 02E0 CADD07 JZ L0F41 02E3 FE44 CPI 'D' 02E5 CAE407 JZ L0F48 02E8 C9 RET 02E9 DB07 L0A3F in keyb+2 02EB E604 ani 00000100b jrz L0A3F 02ED+28FA DB 28H,L0A3F-$-1 02EF 3E04 mvi a,ctrlD 02F1 D305 out keyb 02F3 C9 ret ;CTRL codes 02F4 FE0D L0A44 CPI cr 02F6 CA9400 JZ L07E6 02F9 FE0A CPI lf 02FB CAA800 JZ L07FA 02FE FE07 CPI bell JRZ L0A3F 0300+28E7 DB 28H,L0A3F-$-1 0302 FE18 CPI ctrlX 0304 CA8408 JZ L06A1 0307 FE17 CPI ctrlW 0309 CA8908 JZ L06A6 030C FE1A CPI ctrlZ 030E CABD08 JZ L06F8 0311 FE08 CPI bs 0313 CAF600 JZ L0848 0316 FE0C CPI ff 0318 CA2501 JZ L0877 031B FE0B CPI ctrlK 031D CADF00 JZ L0831 0320 FE1E CPI rs 0322 CA2409 JZ L075F 0325 FE1B CPI esc 0327 C23D00 JNZ L078F 032A 3E01 MVI A,1 032C 323209 STA escflg 032F C9 RET 0330 3A3509 L0A8C LDA attrib 0333 E620 ANI 00100000b JRZ L0AC9 0335+2836 DB 28H,L0AC9-$-1 0337 2A3809 L0A93 LHLD starta 033A 118007 LXI D,1920 033D 015000 LXI B,80 0340 19 DAD D 0341 7C MOV A,H 0342 E607 ANI 00000111b 0344 67 MOV H,A 0345 54 MOV D,H 0346 5D MOV E,L 0347 09 DAD B 0348 7C MOV A,H 0349 E607 ANI 00000111b 034B 67 MOV H,A 034C EB XCHG 034D E5 PUSH H 034E CD9403 CALL L0AF0 0351 D1 POP D 0352 215000 LXI H,80 0355 CDD608 CALL L0711 0358 2A3809 LHLD starta 035B 115000 LXI D,80 035E 19 DAD D 035F 7C MOV A,H 0360 E607 ANI 00000111b 0362 67 MOV H,A 0363 223809 SHLD starta 0366 EB XCHG 0367 011C0C LXI B,crtadr + (startH shl 8) 036A C32F02 JMP L0981 036D 2A3809 L0AC9 LHLD starta 0370 115000 LXI D,80 0373 19 DAD D 0374 7C MOV A,H 0375 E607 ANI 00000111b 0377 67 MOV H,A 0378 223809 SHLD starta 037B EB XCHG 037C 011C0C LXI B,crtadr + (startH shl 8) 037F CD2F02 CALL L0981 0382 2A3809 LHLD starta 0385 118007 LXI D,1920 0388 19 DAD D 0389 7C MOV A,H 038A E607 ANI 00000111b 038C 67 MOV H,A 038D EB XCHG 038E 215000 LXI H,80 0391 C3D608 JMP L0711 0394 78 L0AF0 MOV A,B 0395 E607 ANI 00000111b 0397 B1 ORA C 0398 C8 RZ 0399 C5 L0AF5 PUSH B 039A DB1C L0AF6 IN vidctl 039C B7 ORA A 039D F29A03 JP L0AF6 03A0 011312 LXI B,ramioL + (ramioH shl 8) 03A3 78 MOV A,B 03A4 D31C OUT crtadr 03A6 7C MOV A,H 03A7 D31D OUT crtreg 03A9 79 MOV A,C 03AA D31C OUT crtadr 03AC 7D MOV A,L 03AD D31D OUT crtreg 03AF 3E1F MVI A,nulla 03B1 D31C OUT crtadr 03B3 DB1C L0B0F IN vidctl 03B5 B7 ORA A 03B6 F2B303 JP L0B0F 03B9 DB1F IN viddat EXAF 03BB+08 DB 08H 03BC 78 MOV A,B 03BD D31C OUT crtadr 03BF 7A MOV A,D 03C0 D31D OUT crtreg 03C2 79 MOV A,C 03C3 D31C OUT crtadr 03C5 7B MOV A,E 03C6 D31D OUT crtreg 03C8 3E1F MVI A,nulla 03CA D31C OUT crtadr EXAF 03CC+08 DB 08H 03CD D31F OUT viddat 03CF 13 INX D 03D0 23 INX H 03D1 7A MOV A,D 03D2 E607 ANI 00000111b 03D4 57 MOV D,A 03D5 7C MOV A,H 03D6 E607 ANI 00000111b 03D8 67 MOV H,A 03D9 DB1C L0B35 IN vidctl 03DB B7 ORA A 03DC F2D903 JP L0B35 03DF 78 MOV A,B 03E0 D31C OUT crtadr 03E2 7C MOV A,H 03E3 F608 ORI 00001000b 03E5 D31D OUT crtreg 03E7 79 MOV A,C 03E8 D31C OUT crtadr 03EA 7D MOV A,L 03EB D31D OUT crtreg 03ED 3E1F MVI A,nulla 03EF D31C OUT crtadr 03F1 DB1C L0B4D IN vidctl 03F3 B7 ORA A 03F4 F2F103 JP L0B4D 03F7 DB1F IN viddat EXAF 03F9+08 DB 08H 03FA 78 MOV A,B 03FB D31C OUT crtadr 03FD 7A MOV A,D 03FE F608 ORI 00001000b 0400 D31D OUT crtreg 0402 79 MOV A,C 0403 D31C OUT crtadr 0405 7B MOV A,E 0406 D31D OUT crtreg 0408 3E1F MVI A,nulla 040A D31C OUT crtadr EXAF 040C+08 DB 08H 040D D31F OUT viddat 040F C1 POP B 0410 0B DCX B 0411 78 MOV A,B 0412 B1 ORA C 0413 C29903 JNZ L0AF5 0416 C3A304 JMP L0BFF 0419 78 L0B75 MOV A,B 041A E607 ANI 00000111b 041C B1 ORA C 041D C8 RZ 041E C5 L0B7A PUSH B 041F DB1C L0B7B IN vidctl 0421 B7 ORA A 0422 F21F04 _ *N #q#p sOr *N w:; Or *N w*N ~g :\ :[ :; 2  *N 6 } :; Or *N w!s s+q:r !s !l 6N!m"t :l  « !n"t t f ͤ ڸ t f ͤ +s#r!l 4Õ !j 6 > !j :j =2j  !w 6 *j & ) :w [ !f Ϳ   *N ~2m *N  ~2n *N  ~2o *N #^#V"f +! g !v s͐ !w 6 :l  >;!f ͼ Hi !w 6 *j & ) :w [ f ʹ !k s+4!{ 6:v O ! DḾ j*l & !d g *{ & !{ s*l & i !l sW *j M*k M*{ M*l M4 W *k M*j M*{ M*l M4 *{ M*l M *j M *k M j*m M*n M*o M;!} p+q! "~ *| "N  "P *N ~  !R 6͊ û *N ~~HҸ !R 6 *P ~2\ ͕ *R & *P "~ û ! 6 2 .* DM , -  O  ! 6 >!  * &   N ! 4 ! r+s+p+q+q! 6 : =! W * & * * & *  P > ! 4' >_ ogDM! >))덑o|gҀ =n DM! >))ҕ = O {ozgi`N#Fogo& og_ {_z#W  0 @  $ "" @ B!  @@D $$A$ $D "@I $A$$I!HI$ BA$ $DH $I$I"HI$I!$D B$"B I$$I$ !I$@DBB$@D@"I A!$ @  @  " $ $I$I$ B ! $@ I @I$ HBDH$ A$H!RH:8_H:8$H:8!8/H@*8Mͧ͂!84*8Mj*8MRH:8_H:8$Hx͂!84@ *8 6*8 :8w:8!8q*8Mj*8MRH:8*H:8?H:8_H:8$H!8q:8!8w*8M͎!8:8Hp:8*c:828*8& "8͂*8M͎&!84͂!8:8;*8!8s> !86!8:8+X?ͧ!84@*8!8sj*8Mͧ͂>!86> !8ڔ*8& *86 !84x:8::8A/>P!8/H:8A  ͧ*8Mj:8$H:8_H:8*H:8?H*8~ > $> :8.K͂*8M͎K!86K>  *8 6 *8 6@>!8q*8MRp> *8MR *8 :8/H:8 Hҭ*8Mͧ͂ *8 4p:8H:8DH:8BH *8 ~!8*8Mͧ͂ *8 4>  *8 6 >!8q:8\> ͂:8\:8 H *8 ~ HR*8Mͧ͂ *8 4:8\:8 Hp͂R:8\{>  *8 6͂>:828sҚ>:8=28͂!86 ͧ    ^> >:8,:8)H:8 H  *8 6>͊ *8 >w>>  ͧ O> K *8 >w*8 > H *8 6 >> :8,:8)H:8 H~ *8 6>͊ғ *8 >w>> :8ҩ*8q#p> *8 6 *8##q#p>:8   *8MI0:8 ͖:8](͂:8,:8(H:8)H2:8 !͖G:8 :8,HG͂:8a   *8MI0:8 m͖:8 :8,Hҏ͂͡Þ:8)ž͂> :8ҷ   *8MI0:8*8q#p *8 6>28K> :8   *8MI0:8( ͂͡:8%*8q#p *8 6>283> ;:8M   *8MI0:8 Z͖3:8! 9w͂! 9~,~ H҂3! 9~]:8(:8,H:8)Hҵ23:8 ͖33! 9~=3> 3:8   *8MI0:8 *8q#p *8 6> *8 :8wO>!> 28/6> :8H   *8MI0:8):8 Hv:8 l͖͂!85H:8[…͂:8 :8,H:8(HҼ:8(µ!84͂:8$   *8MI0:8 *8 6*8q#p>:8(!84͂ *8 :8wO>> N28'2> :8@I!86͂6   *8MI0:8 U͖:8)`> :8(s!84͂:8[‚͂N28Ґ2> !8p+q*8"8##^#V"8 *8 ^#V"8!86!86͂!86  *8 6  *8 6 *8 ~*8*͏6*28o*8͏628o*8͏6(28o*8͏6>28o*8͏6T͡28o*8͏6j͖28o!86 :8 *8 6*8##͏6ʞ*8##:85+s#r!8p+q*8"8*8##N#F *8##N#F*8##q#p*8*q#p Scanning Directory... $Out of Memory $Not Enough Memory $     !8p+q*8   M28u!8r+s+p+q+q!86 :8=!8ڦ*8& *8>*8& *8>H~?Hҟ> !84b>*8>28!v8:f8> ! "8*88*h885> `6> > h8́6:8 H:g8 H*8j8!86 :7=!8ڜ *8& %67 ~:w8Hҕ *8& %67  ~l:7/ *8# *8& %67  Nҕ:7/!84:7!86 !86> !8*8& *8>!8w!84ª:v8!8wwO !9 "8O !9 ^#V"8!86 > 8́6:8/HV*8*8> *8#*8#NH>!86S *8 "8*8 ^#V"8> 8́6e> >*8~!&͠&*8#DMl!"88̈́6ґ> 88t6Ҡ>  *8"8"8*8#"8. *8#*8#, -*8>*8w *8 > w#6  *8 w#6  *8 w#6  *8 w *8 w#6  *8 w#6 *8*8s#r:8Ҭ*8> ©*8~!ʩ *8 Ͳ1ڦ *8 8y6c6o>  8y6+s#r. *8*8DM,Ò -Ž *8 *8s#rý*8> ʺý>. *8#*8#, - *8 *8 ~w!86 !861>`6!86!86>!8k&:8!8w k*8& *8n& "8:8X*8&  *8~896+s#r> 8́6h!84> !8  *8 Ͳ1<_ *8& %6 *8 >Ͳ1Hj6ͳ/ *8 *9& *8& %65 *8 >Ͳ1HPYj6+s#r *8 *9& *8& %65+s#rY0 8y6"8!86 >!8C *8& 9) > w#6 !84# * "81!86 ! "8"8!\ 6?\ $28! "8~!| !86Á !86 :8 :8o&  "8:8ҷ *8& 6a  "8*8~ *8#"8*8~  *8 ~28 ͩ i Y0=428Á !:"8 :y6!Y0u Sort Stack Overflow $Not Enough Memory for Sort $ Sorting Directory... $!9p+q*9))))*9)) *9) *9 *8 !9r+s+p+q!96> !9!*9& *9>29*9& *9>2 9H!! 9:9!94¤!> !9r+s+p+q!N96 * 9"9*9"9:N9 #*N9& ))9 ^#V" 9  ^#V"9!N959 9t6#* 9"9*9"9*9* 9T6)* 9N#Fl!"899t6O#*9)* 9N#Fl!"8*8DM*8͕!Ҭ"*9#"9*9)* 9N#Fl!"8À"*9)* 9N#Fl!"8*8DM*8͕!"*9+"9*9)* 9N#Fl!"8þ"99t6L#*9)* 9^#V"9*9)* 9*9)* 9N#Fq#p*9)* 9*9s#r*9#"9> !9͌6L#*9+"9b" 99t699t6c6ҩ#99t6Ҡ#!N94n& ))9 *9s#r*N9& ))  *9s#r*9"9#9 9t6#!N94n& ))9 * 9s#r*N9& ))  *9s#r*9" 9."":N9#!Y0$!86 *8" 9>8́6$ 98t6T6!8͏68$5!Y0! "O9*8+!O9͏6k$*O9)* 9*O9s#r *O9"O9>$R!Y0*8+ !!86 Name Bytes Recs Attributes $------------ ------ ------ ------------$ Prot Update $ ------ -------------- --------------$ Access $ Create $ Press RETURN to Continue $Sys$Dir$RO$RW$Arcv $ $Read $Write $Delete$None $ $Directory For Drive $ User $: $k$ERROR: Illegal Format Value. $ERROR: Date and Time Stamping Inactive. $Total Bytes = $ Total Records = $ Files Found = $ Total 1k Blocks = $ Used/Max Dir Entries For Drive $No File $  w&2X9:X9 —&w&2X9Æ&:X9¢&u:7 &*o8+:Y9j6&2%Y0*d9#"d9̀&!Y96 o0!Y94 *8 ^#VZ9ͳ/ *8 ]9/ *8 ^#V`9ͳ/*8#DMz0i0 *8 N#F'0kI0i0 *8 DM D1i0 *8 ~T'N%Y0Z'R%Y0i0 *8 ~s'V%Y0y'Y%Y0i0:t8ڢ' *8 ~ҙ'\%Y0ß'b%Y0( *8 ~ҷ'AI0ú'i0*8#~'1I0'i0*8##~'2I0'i0 *8 ~'3I0'i0 *8 ~(4I0(i0 *8 > ͌6(i0 *8 ^#V"8 > L(h%Y0Â( *8 >@ d(o%Y0Â( *8 > |(v%Y0Â(}%Y0i0 *8 ~ *8 ~ HҴ( *8 DM̈́5ú(%Y0i0i0*8~ *8#~ H(*8DM̈́5:r8( I0(:f9(ͣ&%Y0:w8AOI0:I0:7 -)%Y0*v8&  0ͣ&! "d9!f96 !h9p+q*R9*c9& 5> `6ž)*d9*o85> `6!V9͏6H҈)ͣ&(ͣ&Ë)ͣ&*d9#"d9:w8AOI0á)i0%Y0*g9DMz0=*R9#"R9*V9#"V9!k9s+q+q:i9ր!j9)>:i9ր!k9)>> !m9p+q *l9 N*7M*7) *l9 N*7M*7)H!\ 6?!c96\ $2n9:n9ʬ*:n9o&  "8>  *8 ~ HͲ1ᖟ/Hң*ͩң**8#DM)ң**8#DM<)42n9?*!s96 :8#+*q9#"q9*q9)* 9N#Fl!"8*8:v88q9t6H +*q9#"q9*q9)* 9N#Fl!"8*8q9t6 +*o9"8Y+ *8"8*8:v8o98t6HY+ *8"8-+:n8 l+!c96q+!c96o98t6+ *8 > ͌6!7> ́6!7H*8#DM)H+&*8#DM<) *8 N#F'0%Y0ͭ*q+!c96! "V9o98t6, *8 > ͌6!7> ́6!7H*8#DM)H,*R9*c9& 5> `6,*d9*o85> `6,:7 > V9́6Hҵ,ͣ&(ͣ&$Y0i0$Y0ͣ&$Y0i0$Y0ͣ& *d9"d9*V9#"V9ÿ,ͣ&*d9#"d9,ͣ&*d9#"d9,i0'*R9#"R9&=ͭ*+!c96! "V9o98t6- *8 > ͌6!7> ́6!7H*8#DM)H-*d9*o85> `6¸-:7 > V9́6HҸ-ͣ&(ͣ&$Y0$Y0:8@ ʏ-%Y0Õ-!%Y0ͣ&$Y0$Y0ͣ& *d9"d9*V9#"V9ͣ&*d9#"d9'(*R9#"R9=&ͭ*,! "d9"R9"Z9}2\9o& "]92_9o& "`92b9 8y6"8*8 "o9!"q9ͭ*>!n8,.%Y0u*n8M !. ^#V,*.Z+.:s8ҝ.:8 :8@ :8 H:8 HH!8ґ.,Ú.%Y0uø.:8 !8ҵ.,ø.+.<.B.H.:n8 > !R9͌6H~/ *d9o8̈́6!r8. I0 I0/ͣ&ͣ&%Y0 Z9D1kI0&Y0 ]9D1$&Y0*R905&Y0 `9D1J&Y0:w8AOI0:I0i0*80/I01#0> R9́6£/:q8ҝ/ͣ&(m&Y0=ò/!Q96:r8ڲ/ͣ&!w9r+s+p+q*t9^#V"x9*t9v95s#r!x9͏6/*t9##4!}9r+s+p+q*|9^#V*z9DMͳ/*|9##*z9##~`iw!9p+q*~9##~29*~9##~w*~9P6+s#r*~9#:9w!9q*9&  !9p+q*9   I0 I0 I0!9p+q!96 >!9ڦ0*9& *9>OI0!94…0 I0!96> !90*9& *9>OI0!94°0!9s+p+q+p+q> 9́6C1*9*95!9s*95"9PY! 5"9> `6!9#~H21i0@1!96 :90OI00!9r+s+p+q*9##~ ~1*9##N *9DM0*9N#F '0ñ1!969:9́6ڢ1i0*9& 6!9sÃ1*9N#F'0!9q*9& *9~!9q*9& *9*9&  *9N `iJ6n&   "9Ͳ1<o& "9  ; Z x 0NSun$Mon$Tue$Wed$Thu$Fri$Sat$!9q:9<29O *9 :9w!9p+q*9~$ʆ2*9:9<29O *9 w*9#"9^2!9q:90OA2!9q:9O͇2:9O͇2!9q*9M͕2:A2!9q*9& !d 5!9s*9& ! 5K͇2*9& ! 5M͇2!9q*9M2/A2!9q*9M2-A2!9s+q:929:9 *9&  2) >;́6HQ3:9=:9*9! 5!9s*95"9:9!9q*9& ! 5))))*9& 5 }!9s+q:9!9!96N!m"9:9 3!n"999t6399t6+s#r!94í3!96 > !9#4:9=294!96 *9&  2) :95!9͏6 43 *9 ~29*9 ~29*9 ~29*9#^#V"9+! 5!9sͨ3!96 :9 >;!9͌6Hҁ4!963*9&  2) :959̈́6!9s+4*9~ 4:9O !%2 DMX2 A2 T4*9M3*9M3*9M25 T 5*9M2*9M2*9M25*9M2*9M2*9M2 A2*9MͰ2*9MͰ2*9~ A5*9M͕2!9p+q! "9*9"9 "9*9~ ~HҀ5$4!96͢4Ã5u!9p+q!96.*9DM9,ã5 -Ÿ59B5!96 > !95*9&  9 NI0!94²5i`N#Fog_ og_ ogDM! >))덑o|g6 =6^#V))) DM! >))46 =,6_ og^#V) J6^#V|g}o T6_ {ozgO {ozgi`N#Fogo& og_ {_z#Wi`N#Fog  \   Ϳ   *N ~2m *N  ~2n *N  ~2o *N #^#V"f +! g !v s͐ !w 6 :l  >;!f ͼ Hi !w 6 *j & ) :w [ f ʹ !k s+4!{ 6:v O ! DḾ j*l & !d g *{ & !{ s*l & i !l sW *j M*k M*{ M*l M4 W *k MTESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DRIVES Syntax: DRIVES Explanation: The DRIVES Command displays the logical-physical drive table in the BIOS. Example: A>DRIVES DRIVES v3.103 A: = (50) KAYPRO Winchester Disk Interface 3.100d B: = (51) KAYPRO Winchester Disk Interface 3.100d C: = (33) KAYPRO Floppy Disk Controller 3.100d ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space JP L0B7B 0425 011312 LXI B,ramioL + (ramioH shl 8) 0428 78 MOV A,B 0429 D31C OUT crtadr 042B 7C MOV A,H 042C E607 ANI 00000111b 042E D31D OUT crtreg 0430 79 MOV A,C 0431 D31C OUT crtadr 0433 7D MOV A,L 0434 D31D OUT crtreg 0436 3E1F MVI A,nulla 0438 D31C OUT crtadr 043A DB1C L0B96 IN vidctl 043C B7 ORA A 043D F23A04 JP L0B96 0440 DB1F IN viddat EXAF 0442+08 DB 08H 0443 78 MOV A,B 0444 D31C OUT crtadr 0446 7A MOV A,D 0447 E607 ANI 00000111b 0449 D31D OUT crtreg 044B 79 MOV A,C 044C D31C OUT crtadr 044E 7B MOV A,E 044F D31D OUT crtreg 0451 3E1F MVI A,nulla 0453 D31C OUT crtadr EXAF 0455+08 DB 08H 0456 D31F OUT viddat 0458 13 INX D 0459 23 INX H 045A 7A MOV A,D 045B E607 ANI 00000111b 045D 57 MOV D,A 045E 7C MOV A,H 045F E607 ANI 00000111b 0461 67 MOV H,A 0462 DB1C L0BBE IN vidctl 0464 B7 ORA A 0465 F26204 JP L0BBE 0468 78 MOV A,B 0469 D31C OUT crtadr 046B 7C MOV A,H 046C F608 ORI 8 046E D31D OUT crtreg 0470 79 MOV A,C 0471 D31C OUT crtadr 0473 7D MOV A,L 0474 D31D OUT crtreg 0476 3E1F MVI A,nulla 0478 D31C OUT crtadr 047A DB1C L0BD6 IN vidctl 047C B7 ORA A 047D F27A04 JP L0BD6 0480 DB1F IN viddat EXAF 0482+08 DB 08H 0483 78 MOV A,B 0484 D31C OUT crtadr 0486 7A MOV A,D 0487 F608 ORI 00001000b 0489 D31D OUT crtreg 048B 79 MOV A,C 048C D31C OUT crtadr 048E 7B MOV A,E 048F D31D OUT crtreg 0491 3E1F MVI A,nulla 0493 D31C OUT crtadr EXAF 0495+08 DB 08H 0496 D31F OUT viddat 0498 C1 POP B 0499 2B DCX H 049A 2B DCX H 049B 1B DCX D 049C 1B DCX D 049D 0B DCX B 049E 78 MOV A,B 049F B1 ORA C 04A0 C21E04 JNZ L0B7A 04A3 DB1C L0BFF IN vidctl 04A5 B7 ORA A 04A6 F2A304 JP L0BFF 04A9 C9 RET 04AA CD9400 L0C06 CALL L07E6 04AD 3A3309 LDA line 04B0 B7 ORA A 04B1 CAF304 JZ L0C4F LDED curpos 04B4+ED5B DB 0EDH,5BH 04B6+3609 DW CURPOS 04B8 215000 LXI H,80 04BB FE17 CPI 23 04BD D2D608 JNC L0711 04C0 FE0B CPI 11 JRNC L0C64 04C2+3044 DB 30H,L0C64-$-1 04C4 EB XCHG 04C5 014F00 LXI B,79 04C8 09 DAD B 04C9 7C MOV A,H 04CA E607 ANI 00000111b 04CC 67 MOV H,A 04CD 44 MOV B,H 04CE 4D MOV C,L DSBC D 04CF+ED52 DB 0EDH,D*8+42H 04D1 7C MOV A,H 04D2 E607 ANI 00000111b 04D4 67 MOV H,A 04D5 E5 PUSH H LDED starta 04D6+ED5B DB 0EDH,5BH 04D8+3809 DW STARTA DSBC D 04DA+ED52 DB 0EDH,D*8+42H JRNC L0C5D 04DC+3023 DB 30H,L0C5D-$-1 04DE 210008 LXI H,2048 04E1 B7 ORA A DSBC D 04E2+ED52 DB 0EDH,D*8+42H 04E4 D1 POP D 04E5 19 DAD D 04E6 7C MOV A,H 04E7 E607 ANI 00000111b 04E9 60 MOV H,B 04EA 47 MOV B,A 04EB 7D MOV A,L 04EC 69 MOV L,C 04ED 4F MOV C,A 04EE EB XCHG 04EF 03 L0C4B INX B 04F0 CD1904 CALL L0B75 04F3 CD3703 L0C4F CALL L0A93 04F6 2A3609 LHLD curpos 04F9 115000 LXI D,80 04FC 19 DAD D 04FD EB XCHG 04FE C3C300 JMP L0815 0501 50 L0C5D MOV D,B 0502 59 MOV E,C 0503 44 MOV B,H 0504 4D MOV C,L 0505 E1 POP H JR L0C4B 0506+18E7 DB 18H,L0C4B-$-1 0508 19 L0C64 DAD D 0509 7C MOV A,H 050A E607 ANI 00000111b 050C 57 MOV D,A 050D 5D MOV E,L 050E 2A3809 LHLD starta 0511 018007 LXI B,1920 0514 09 DAD B 0515 7C MOV A,H 0516 E607 ANI 00000111b 0518 67 MOV H,A 0519 47 MOV B,A 051A 4D MOV C,L DSBC D 051B+ED52 DB 0EDH,D*8+42H JRNC L0C82 051D+3007 DB 30H,L0C82-$-1 051F 210008 LXI H,2048 0522 B7 ORA A DSBC D 0523+ED52 DB 0EDH,D*8+42H 0525 09 DAD B 0526 44 L0C82 MOV B,H 0527 4D MOV C,L 0528 2A3609 LHLD curpos 052B EB XCHG 052C CD9403 CALL L0AF0 052F 2A3809 LHLD starta 0532 113007 LXI D,1840 0535 19 DAD D 0536 7C MOV A,H 0537 E607 ANI 00000111b 0539 57 MOV D,A 053A 5D MOV E,L 053B 215000 LXI H,80 053E C3D608 JMP L0711 0541 3A3309 L0C9D LDA line 0544 FE0C CPI 12 0546 D2F205 JNC L0D4E 0549 2A3809 LHLD starta 054C 115000 LXI D,80 054F B7 ORA A DSBC D 0550+ED52 DB 0EDH,D*8+42H 0552 7C MOV A,H 0553 E607 ANI 00000111b 0555 67 MOV H,A 0556 EB XCHG 0557 011C0C LXI B,crtadr + (startH shl 8) 055A CD2F02 CALL L0981 055D 2A3609 LHLD curpos LBCD starta 0560+ED4B DB 0EDH,4BH 0562+3809 DW STARTA 0564 B7 ORA A DSBC B 0565+ED42 DB 0EDH,B*8+42H JRNC L0CD4 0567+300F DB 30H,L0CD4-$-1 0569 210008 LXI H,2048 056C B7 ORA A DSBC B 056D+ED42 DB 0EDH,B*8+42H 056F 7C MOV A,H 0570 E607 ANI 00000111b 0572 67 MOV H,A LBCD curpos 0573+ED4B DB 0EDH,4BH 0575+3609 DW CURPOS 0577 09 DAD B 0578 7C L0CD4 MOV A,H 0579 E607 ANI 00000111b 057B 47 MOV B,A 057C 4D MOV C,L 057D 218000 LXI H,128 0580 09 DAD B 0581 7C MOV A,H 0582 E607 ANI 00000111b 0584 47 MOV B,A 0585 4D MOV C,L 0586 2A3809 LHLD starta 0589 113007 LXI D,1840 058C 19 DAD D 058D 7C MOV A,H 058E E607 ANI 00000111b 0590 67 MOV H,A 0591 EB XCHG 0592 215000 LXI H,80 0595 19 DAD D 0596 7C MOV A,H 0597 E607 ANI 00000111b 0599 67 MOV H,A 059A CD9403 CALL L0AF0 059D 2A3609 LHLD curpos 05A0 015000 LXI B,80 05A3 B7 ORA A DSBC B 05A4+ED42 DB 0EDH,B*8+42H 05A6 7C MOV A,H 05A7 E607 ANI 00000111b 05A9 67 MOV H,A 05AA EB XCHG 05AB 3A3409 LDA column 05AE 4F MOV C,A 05AF 0600 MVI B,0 05B1 215000 LXI H,80 DSBC B 05B4+ED42 DB 0EDH,B*8+42H 05B6 D5 PUSH D 05B7 E5 PUSH H 05B8 CDD608 CALL L0711 05BB C1 POP B 05BC C5 PUSH B 05BD 2A3609 LHLD curpos 05C0 3A3409 LDA column 05C3 5F MOV E,A 05C4 1600 MVI D,0 05C6 B7 ORA A DSBC D 05C7+ED52 DB 0EDH,D*8+42H 05C9 7C MOV A,H 05CA E607 ANI 00000111b 05CC 57 MOV D,A 05CD 5D MOV E,L 05CE 2A3609 LHLD curpos 05D1 CD9403 CALL L0AF0 05D4 C1 POP B 05D5 215000 LXI H,80 05D8 B7 ORA A DSBC B 05D9+ED42 DB 0EDH,B*8+42H 05DB C4D608 CNZ L0711 05DE 2A3809 LHLD starta 05E1 015000 LXI B,80 05E4 B7 ORA A DSBC B 05E5+ED42 DB 0EDH,B*8+42H 05E7 7C MOV A,H 05E8 E607 ANI 00000111b 05EA 67 MOV H,A 05EB 223809 SHLD starta 05EE D1 POP D 05EF C3C300 JMP L0815 05F2 D616 L0D4E SUI 22 JRZ L0D7C 05F4+282A DB 28H,L0D7C-$-1 05F6 D28408 JNC L06A1 NEG 05F9+ED44 DB 0EDH,44H 05FB F5 PUSH PSW 05FC 2A3809 LHLD starta 05FF 112F07 LXI D,1839 0602 015000 LXI B,80 0605 19 DAD D 0606 7C MOV A,H 0607 E607 ANI 00000111b 0609 57 MOV D,A 060A 5D MOV E,L 060B 09 DAD B 060C 7C MOV A,H 060D E607 ANI 00000111b 060F 67 MOV H,A 0610 EB XCHG 0611 F1 POP PSW 0612 E5 PUSH H 0613 210000 LXI H,0 0616 09 L0D72 DAD B 0617 3D DCR A JRNZ L0D72 0618+20FC DB 20H,L0D72-$-1 061A 44 MOV B,H 061B 4D MOV C,L 061C E1 POP H 061D CD1904 CALL L0B75 0620 2A3609 L0D7C LHLD curpos 0623 54 MOV D,H 0624 5D MOV E,L 0625 3A3409 LDA column 0628 4F MOV C,A 0629 3E50 MVI A,80 062B 91 SUB C 062C 4F MOV C,A 062D 0600 MVI B,0 062F 09 DAD B 0630 7C MOV A,H 0631 E607 ANI 00000111b 0633 67 MOV H,A 0634 EB XCHG 0635 CD9403 CALL L0AF0 0638 3A3409 LDA column 063B 6F MOV L,A 063C 2600 MVI H,0 063E B7 ORA A 063F C4D608 CNZ L0711 0642 C38408 JMP L06A1 0645 3E00 L0DA1 MVI A,0 0647 324109 STA LFD83 JR L0DAD 064A+1805 DB 18H,L0DAD-$-1 064C 3EFF L0DA8 MVI A,-1 064E 324109 STA LFD83 0651 3A3D09 L0DAD LDA LFD7F 0654 D620 SUI ' ' 0656 5F MOV E,A 0657 3A3F09 LDA LFD81 065A D620 SUI ' ' 065C 57 MOV D,A 065D 7A L0DB9 MOV A,D 065E FE64 CPI 100 0660 D0 RNC 0661 E603 ANI 0011b 0663 47 MOV B,A srlr d 0664+CB3A DB 0CBH,38H+D srlr d 0666+CB3A DB 0CBH,38H+D 0668 7B MOV A,E 0669 FEA0 CPI 160 066B D0 RNC 066C 0F RRC 066D 5F MOV E,A 066E 3E01 MVI A,1 JRC L0DD1 0670+3801 DB 38H,L0DD1-$-1 0672 87 ADD A 0673 04 L0DD1 INR B 0674 05 DCR B JRZ L0DDA 0675+2804 DB 28H,L0DDA-$-1 0677 87 L0DD5 ADD A 0678 87 ADD A djnz L0DD5 0679+10FC DB 10H,L0DD5-$-1 067B 324309 L0DDA STA LFD85 067E 7B MOV A,E 067F E67F ANI 01111111b 0681 5F MOV E,A 0682 2A3809 LHLD starta 0685 42 MOV B,D 0686 4B MOV C,E 0687 115000 LXI D,80 068A 04 INR B JR L0DED 068B+1801 DB 18H,L0DED-$-1 068D 19 L0DEC DAD D L0DED DJNZ L0DEC 068E+10FD DB 10H,L0DEC-$-1 0690 1600 MVI D,0 0692 59 MOV E,C 0693 19 DAD D 0694 7C MOV A,H 0695 E607 ANI 00000111b 0697 57 MOV D,A 0698 5D MOV E,L SDED LFD86 0699+ED53 DB 0EDH,53H 069B+4409 DW LFD86 069D CD3407 CALL L0E93 06A0 B7 ORA A 06A1 FAA906 JM L0E08 06A4 FE20 CPI ' ' 06A6 C0 RNZ 06A7 3E80 MVI A,128 06A9 324209 L0E08 STA LFD84 06AC 3A4309 LDA LFD85 06AF B7 ORA A 06B0 F2EB06 JP L0E4A LDED LFD86 06B3+ED5B DB 0EDH,5BH 06B5+4409 DW LFD86 06B7 CD7707 CALL L0ED9 06BA 323A09 STA LFD7C 06BD E601 ANI 00000001b JRZ L0E37 06BF+2817 DB 28H,L0E37-$-1 06C1 3A4109 LDA LFD83 06C4 B7 ORA A 06C5 C8 RZ 06C6 3A3A09 LDA LFD7C 06C9 E6FE ANI 11111110b LDED LFD86 06CB+ED5B DB 0EDH,5BH 06CD+4409 DW LFD86 06CF CD6907 CALL L0ECB 06D2 3A4209 LDA LFD84 06D5 2F CMA JR L0E6E 06D6+1837 DB 18H,L0E6E-$-1 06D8 3A4109 L0E37 LDA LFD83 06DB B7 ORA A 06DC C0 RNZ 06DD 3A3A09 LDA LFD7C 06E0 F601 ORI 00000001b 06E2 CD6907 CALL L0ECB 06E5 3A4209 LDA LFD84 06E8 2F CMA JR L0E6E 06E9+1824 DB 18H,L0E6E-$-1 L0E4A LDED LFD86 06EB+ED5B DB 0EDH,5BH 06ED+4409 DW LFD86 06EF CD7707 CALL L0ED9 06F2 E601 ANI 00000001b JRNZ L0E78 06F4+2023 DB 20H,L0E78-$-1 06F6 3A4109 LDA LFD83 06F9 B7 ORA A JRZ L0E66 06FA+280B DB 28H,L0E66-$-1 06FC 3A4309 LDA LFD85 06FF 2F CMA 0700 47 MOV B,A 0701 3A4209 LDA LFD84 0704 A0 ANA B JR L0E6E 0705+1808 DB 18H,L0E6E-$-1 0707 3A4209 L0E66 LDA LFD84 070A 47 MOV B,A 070B 3A4309 LDA LFD85 070E B0 ORA B 070F F680 L0E6E ORI 10000000b LDED LFD86 0711+ED5B DB 0EDH,5BH 0713+4409 DW LFD86 0715 CD3E07 CALL L0E9D 0718 C9 RET 0719 3A4109 L0E78 LDA LFD83 071C B7 ORA A JRZ L0E88 071D+280A DB 28H,L0E88-$-1 071F 3A4309 LDA LFD85 0722 47 MOV B,A 0723 3A4209 LDA LFD84 0726 B0 ORA B JR L0E6E 0727+18E6 DB 18H,L0E6E-$-1 0729 3A4309 L0E88 LDA LFD85 072C 2F CMA 072D 47 MOV B,A 072E 3A4209 LDA LFD84 0731 A0 ANA B JR L0E6E 0732+18DB DB 18H,L0E6E-$-1 0734 7A L0E93 MOV A,D 0735 E607 ANI 00000111b 0737 57 MOV D,A 0738 CD4A07 L0E97 CALL L0EA9 073B DB1F IN viddat 073D C9 RET 073E F5 L0E9D PUSH PSW 073F 7A MOV A,D 0740 E607 ANI 00000111b 0742 57 MOV D,A 0743 CD4A07 CALL L0EA9 0746 F1 POP PSW 0747 D31F OUT viddat 0749 C9 RET 074A 011C12 L0EA9 LXI B,crtadr + (ramioH shl 8) 074D CD5C07 CALL L0EBB 0750 0D DCR C 0751 3E1F MVI A,nulla OUTP A 0753+ED79 DB 0EDH,A*8+41H L0EB4 INP A 0755+ED78 DB 0EDH,A*8+40H 0757 B7 ORA A 0758 F25507 JP L0EB4 075B C9 RET L0EBB OUTP B 075C+ED41 DB 0EDH,B*8+41H 075E 0C INR C OUTP D 075F+ED51 DB 0EDH,D*8+41H 0761 0D DCR C 0762 04 INR B OUTP B 0763+ED41 DB 0EDH,B*8+41H 0765 0C INR C OUTP E 0766+ED59 DB 0EDH,E*8+41H 0768 C9 RET 0769 E5 L0ECB PUSH H 076A F5 PUSH PSW 076B CD8107 CALL L0EE3 076E CD4A07 CALL L0EA9 0771 F1 POP PSW 0772 D31F OUT viddat 0774 EB XCHG 0775 E1 POP H 0776 C9 RET 0777 E5 L0ED9 PUSH H 0778 CD8107 CALL L0EE3 077B CD3807 CALL L0E97 077E EB XCHG 077F E1 POP H 0780 C9 RET 0781 21AF00 L0EE3 LXI H,L0801 0784 19 DAD D 0785 7C MOV A,H 0786 E607 ANI 00000111b 0788 F608 ORI 00001000b 078A 67 MOV H,A 078B EB XCHG 078C C9 RET 078D 7B L0EF1 MOV A,E 078E D620 SUI ' ' 0790 5F MOV E,A 0791 7A MOV A,D 0792 D620 SUI ' ' 0794 57 MOV D,A 0795 93 SUB E 0796 C8 RZ JRNC L0EFF 0797+3002 DB 30H,L0EFF-$-1 NEG 0799+ED44 DB 0EDH,44H 079B 3C L0EFF INR A 079C C9 RET 079D 210000 L0F01 LXI H,0 07A0 7A MOV A,D 07A1 B7 ORA A 07A2 C8 RZ 07A3 7B MOV A,E 07A4 B7 ORA A 07A5 C8 RZ 07A6 23 INX H 07A7 BA CMP D JRC L0F10 07A8+3802 DB 38H,L0F10-$-1 07AA 7A MOV A,D 07AB 53 MOV D,E 07AC 1E00 L0F10 MVI E,0 07AE 44 L0F12 MOV B,H 07AF 4D MOV C,L 07B0 87 ADD A JRNC L0F18 07B1+3001 DB 30H,L0F18-$-1 07B3 1C INR E 07B4 09 L0F18 DAD B JRC L0F2F 07B5+3814 DB 38H,L0F2F-$-1 07B7 92 SUB D JRNC L0F2C 07B8+300E DB 30H,L0F2C-$-1 07BA F5 PUSH PSW 07BB 7B MOV A,E 07BC B7 ORA A JRZ L0F28 07BD+2805 DB 28H,L0F28-$-1 07BF F1 POP PSW 07C0 1E00 MVI E,0 JR L0F2C 07C2+1804 DB 18H,L0F2C-$-1 07C4 F1 L0F28 POP PSW 07C5 82 ADD D JR L0F12 07C6+18E6 DB 18H,L0F12-$-1 07C8 23 L0F2C INX H JR L0F12 07C9+18E3 nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page relocatable file for execution under MP/M in relocatable segment OR Output .RSP resident system process file for execution under MP/M OS Output .SPR system page relocatable file for execution under MP/M Phhhh Program origin; changes default program origin address to hhhh. Default is 0100H. Q Lists symbols with leading question mark S Search preceding file as a library $Cd Destination of console messages d can be X (console), Y (printer), or Z (zero output). Default is X. $Id Source of intermediate files; d is disk drive A-P. Default is current drive. $Ld Source of library files; d is disk drive A-P. Default is current drive. $Od Destination of of object file; d can be Z or disk drive A-P. Default is to same drive as first file in the LINK-80 command. $Sd Destination of symbol file; d can be Y or Z or disk drive A-P. Default is to same drive as first file in LINK-80 command. ///2Examples A>LINK b:MYFILE[NR] LINK-80 on drive A uses as input MYFILE.REL on drive B and produces the executable machine code file MYFILE.COM on drive B. The [NR] option specifies no symbol table file. A>LINK m1,m2,m3 LINK-80 combines the separately compiled files m1, m2, and m3, resolves their external references, and produces the executable machine code file m1.COM. A>LINK m=m1,m2,m3 LINK-80 combines the separately compiled files m1, m2, and m3 and proDB 18H,L0F12-$-1 07CB 92 L0F2F SUB D JRNC L0F35 07CC+3003 DB 30H,L0F35-$-1 07CE 7B MOV A,E 07CF B7 ORA A 07D0 C8 RZ 07D1 23 L0F35 INX H 07D2 C9 RET 07D3 E5 L0F37 PUSH H 07D4 D5 PUSH D 07D5 C5 PUSH B 07D6 CD5D06 CALL L0DB9 07D9 C1 POP B 07DA D1 POP D 07DB E1 POP H 07DC C9 RET 07DD 3E00 L0F41 MVI A,0 07DF 324109 STA LFD83 JR L0F4F 07E2+1807 DB 18H,L0F4F-$-1 07E4 3EFF L0F48 MVI A,-1 07E6 324109 STA LFD83 JR L0F4F 07E9+1800 DB 18H,L0F4F-$-1 L0F4F LDED LFD81 07EB+ED5B DB 0EDH,5BH 07ED+3F09 DW LFD81 07EF CD8D07 CALL L0EF1 SDED LFD81 07F2+ED53 DB 0EDH,53H 07F4+3F09 DW LFD81 07F6 324809 STA LFD8A LDED LFD7F 07F9+ED5B DB 0EDH,5BH 07FB+3D09 DW LFD7F 07FD CD8D07 CALL L0EF1 SDED LFD7F 0800+ED53 DB 0EDH,53H 0802+3D09 DW LFD7F 0804 324909 STA LFD8B 0807 57 MOV D,A 0808 3A4809 LDA LFD8A 080B 5F MOV E,A 080C CD9D07 CALL L0F01 080F 3A3F09 LDA LFD81 0812 57 MOV D,A 0813 3A4009 LDA LFD82 0816 BA CMP D 0817 3EFF MVI A,-1 JRC L0F81 0819+3802 DB 38H,L0F81-$-1 081B 3E01 MVI A,1 081D 324609 L0F81 STA LFD88 0820 3A3D09 LDA LFD7F 0823 5F MOV E,A 0824 3A3E09 LDA LFD80 0827 BB CMP E 0828 3EFF MVI A,-1 JRC L0F92 082A+3802 DB 38H,L0F92-$-1 082C 3E01 MVI A,1 082E 324709 L0F92 STA LFD89 0831 3A4809 LDA LFD8A 0834 4F MOV C,A 0835 3A4909 LDA LFD8B 0838 B9 CMP C 0839 44 MOV B,H 083A 4D MOV C,L 083B 210000 LXI H,0 JRC L0FBD 083E+3819 DB 38H,L0FBD-$-1 JRZ L0FD4 0840+282E DB 28H,L0FD4-$-1 0842 CDD307 L0FA6 CALL L0F37 0845 3A3E09 LDA LFD80 0848 BB CMP E 0849 C8 RZ 084A 3A4709 LDA LFD89 084D 83 ADD E 084E 5F MOV E,A 084F 09 DAD B JRNC L0FA6 0850+30F0 DB 30H,L0FA6-$-1 0852 3A4609 LDA LFD88 0855 82 ADD D 0856 57 MOV D,A JR L0FA6 0857+18E9 DB 18H,L0FA6-$-1 0859 CDD307 L0FBD CALL L0F37 085C 3A4009 LDA LFD82 085F BA CMP D 0860 C8 RZ 0861 3A4609 LDA LFD88 0864 82 ADD D 0865 57 MOV D,A 0866 09 DAD B JRNC L0FBD 0867+30F0 DB 30H,L0FBD-$-1 0869 3A4709 LDA LFD89 086C 83 ADD E 086D 5F MOV E,A JR L0FBD 086E+18E9 DB 18H,L0FBD-$-1 0870 CDD307 L0FD4 CALL L0F37 0873 3A4009 LDA LFD82 0876 BA CMP D 0877 C8 RZ 0878 3A4609 LDA LFD88 087B 82 ADD D 087C 57 MOV D,A 087D 3A4709 LDA LFD89 0880 83 ADD E 0881 5F MOV E,A JR L0FD4 0882+18EC DB 18H,L0FD4-$-1 0884 CDAD08 L06A1 CALL L06CA JR L0711 0887+184D DB 18H,L0711-$-1 0889 0E17 L06A6 MVI C,23 088B 3A3509 LDA attrib 088E E620 ANI line25n JRNZ L06B0 0890+2001 DB 20H,L06B0-$-1 0892 0C INR C 0893 3A3309 L06B0 LDA line 0896 91 SUB C JRNC L06A1 0897+30EB DB 30H,L06A1-$-1 NEG 0899+ED44 DB 0EDH,44H 089B 47 MOV B,A 089C 115000 LXI D,80 089F 210000 LXI H,0 08A2 19 L06BF DAD D DJNZ L06BF 08A3+10FD DB 10H,L06BF-$-1 08A5 E5 PUSH H 08A6 CDAD08 CALL L06CA 08A9 C1 POP B 08AA 09 DAD B JR L0711 08AB+1829 DB 18H,L0711-$-1 08AD 215000 L06CA LXI H,80 LDED curpos 08B0+ED5B DB 0EDH,5BH 08B2+3609 DW CURPOS 08B4 3A3409 LDA column 08B7 4F MOV C,A 08B8 AF XRA A 08B9 47 MOV B,A DSBC B 08BA+ED42 DB 0EDH,B*8+42H 08BC C9 RET 08BD CD2409 L06F8 CALL L075F 08C0 3A3509 LDA attrib ;reset attributes 08C3 E6F0 ANI 11110000b 08C5 323509 STA attrib ; ; clear rest of screen LDED curpos 08C8+ED5B DB 0EDH,5BH 08CA+3609 DW CURPOS 08CC 21D007 LXI H,80*25 08CF E620 ANI line25n ;test 25th line JRZ L0711 08D1+2803 DB 28H,L0711-$-1 08D3 218007 LXI H,80*24 08D6 011312 L0711 LXI B,ramioL + (ramioH shl 8) ; 08D9 DB1C L0714 IN vidctl ;wait for ??? 08DB B7 ORA A ; 08DC F2D908 JP L0714 ; 08DF 78 MOV A,B 08E0 D31C OUT crtadr 08E2 7A MOV A,D 08E3 E607 ANI 00000111b 08E5 57 MOV D,A 08E6 D31D OUT crtreg 08E8 79 MOV A,C 08E9 D31C OUT crtadr 08EB 7B MOV A,E 08EC D31D OUT crtreg 08EE 3E1F MVI A,nulla 08F0 D31C OUT crtadr 08F2 DB1C L072D IN vidctl 08F4 B7 ORA A 08F5 F2F208 JP L072D 08F8 3E20 MVI A,' ' 08FA D31F OUT viddat 08FC 13 INX D 08FD DB1C L0738 IN vidctl 08FF B7 ORA A 0900 F2FD08 JP L0738 0903 78 MOV A,B 0904 D31C OUT crtadr 0906 7A MOV A,D 0907 F608 ORI 00001000b 0909 D31D OUT crtreg 090B 79 MOV A,C 090C D31C OUT crtadr 090E 7B MOV A,E 090F D31D OUT crtreg 0911 3E1F MVI A,nulla 0913 D31C OUT crtadr 0915 DB1C L0750 IN vidctl 0917 B7 ORA A 0918 F21509 JP L0750 091B AF XRA A 091C D31F OUT viddat 091E 2B DCX H 091F 7C MOV A,H 0920 B5 ORA L JRNZ L0714 0921+20B6 DB 20H,L0714-$-1 0923 C9 RET 0924 AF L075F XRA A 0925 323409 STA column 0928 323309 STA line 092B 2A3809 LHLD starta 092E EB XCHG 092F C3C300 JMP L0815 0932 00 escflg db 0 0933 00 line db 0 0934 00 column db 0 0935 00 attrib db 0 0936 0000 curpos dw 0 0938 0000 starta dw 0 093A 00 LFD7C db 0 093B 0000 LFD7D dw 0 093D 00 LFD7F db 0 093E 00 LFD80 db 0 093F 00 LFD81 db 0 0940 00 LFD82 db 0 0941 00 LFD83 db 0 0942 00 LFD84 db 0 0943 00 LFD85 db 0 0944 0000 LFD86 dw 0 0946 00 LFD88 db 0 0947 00 LFD89 db 0 0948 00 LFD8A db 0 0949 00 LFD8B db 0 094A 00 LFD8C db 0 endif 094B end 0935 ATTRIB 0000 BC 0007 BELL 0008 BS 0934 COLUMN 000D CR 001C CRTADR 001D CRTREG 0004 CTRLD 000B CTRLK 0017 CTRLW 0018 CTRLX 001A CTRLZ 000B CUREN 0936 CURPOS 000E CURSRH 000F CURSRL 000A CURST 0002 DE 00C8 DEV0 001B ESC 0932 ESCFLG 0000 EXTERNAL 0000 FALSE 000C FF 0004 HL 0008 INIT 0004 IX 0004 IY 0005 KEYB 0884 L06A1 0889 L06A6 0893 L06B0 08A2 L06BF 08AD L06CA 000E L06E0 08BD L06F8 08D6 L0711 08D9 L0714 08F2 L072D 08FD L0738 0915 L0750 0924 L075F 003D L078F 0048 L079A 005C L07AE 0071 L07C3 0079 L07CB 0094 L07E6 00A5 L07F7 00A8 L07FA 00AF L0801 00B7 L0809 00BB L080D 00C3 L0815 00D7 L0829 00DF L0831 00F6 L0848 010B L085D 0116 L0868 0125 L0877 0138 L088A 013B L088D 0159 L08AB 015E L08B0 0163 L08B5 0168 L08BA 016D L08BF 016F L08C1 0177 L08C9 0185 L08D7 018C L08DE 0195 L08E7 01B3 L0905 01B8 L090A 01BD L090F 01C2 L0914 01C7 L0919 01CB L091D 01D0 L0922 01E2 L0934 01EB L093D 01FE L0950 0201 L0953 021D L096F 0228 L097A 022F L0981 023C L0992 0242 L0998 024E L09A4 0251 L09A7 0269 L09BF 0275 L09CB 0297 L09ED 02AF L0A05 02CC L0A22 02D7 L0A2D 02E9 L0A3F 02F4 L0A44 0330 L0A8C 0337 L0A93 036D L0AC9 0394 L0AF0 0399 L0AF5 039A L0AF6 03B3 L0B0F 03D9 L0B35 03F1 L0B4D 0419 L0B75 041E L0B7A 041F L0B7B 043A L0B96 0462 L0BBE 047A L0BD6 04A3 L0BFF 04AA L0C06 04EF L0C4B 04F3 L0C4F 0501 L0C5D 0508 L0C64 0526 L0C82 0541 L0C9D 0578 L0CD4 05F2 L0D4E 0616 L0D72 0620 L0D7C 0645 L0DA1 064C L0DA8 0651 L0DAD 065D L0DB9 0673 L0DD1 0677 L0DD5 067B L0DDA 068D L0DEC 068E L0DED 06A9 L0E08 06D8 L0E37 06EB L0E4A 0707 L0E66 070F L0E6E 0719 L0E78 0729 L0E88 0734 L0E93 0738 L0E97 073E L0E9D 074A L0EA9 0755 L0EB4 075C L0EBB 0769 L0ECB 0777 L0ED9 0781 L0EE3 078D L0EF1 079B L0EFF 079D L0F01 07AC L0F10 07AE L0F12 07B4 L0F18 07C4 L0F28 07C8 L0F2C 07CB L0F2F 07D1 L0F35 07D3 L0F37 07DD L0F41 07E4 L0F48 07EB L0F4F 081D L0F81 082E L0F92 0842 L0FA6 0859 L0FBD 0870 L0FD4 000A LF 093A LFD7C 093B LFD7D 093D LFD7F 093E LFD80 093F LFD81 0940 LFD82 0941 LFD83 0942 LFD84 0943 LFD85 0944 LFD86 0946 LFD88 0947 LFD89 0948 LFD8A 0949 LFD8B 094A LFD8C 0933 LINE 0020 LINE25N 0035 MODCRT 0001 NDEV 001F NULLA 0025 NULLIN 0028 NULLST 002B OUTPUT 0012 RAMIOH 0013 RAMIOL 001E RS 0004 SIO1 0938 STARTA 000C STARTH 000D STARTL 0019 STRCRT 0014 SYSCTL 0000 TBLCRT 0039 THREAD FFFF TRUE 6730 VERS 001C VIDCTL 001F VIDDAT 0000 @CTBL 0000 @VECT  6530 = vers equ '0e' ; December 23, 1985 21:40 drm "KEYBD.ASM" ;******************************************************** ; KEYBOARD module for CP/M plus on the KAYPRO * ; Copyright (C) 1985 Douglas Miller * ;******************************************************** maclib Z80 0000 = false equ 0 FFFF = true equ not false 00C8 = dbase equ 200 ;base for all char I/O devices 0001 = dev0 equ 001 ;first device, rel. to base 0001 = ndev equ 1 0000 = int equ false ;Keyboard input via interupts? 0010 = bufsiz equ 16 ;use only 2,4,8,16,32,64,128,256. 000F = bufmsk equ bufsiz-1 0004 = sio1 equ 004h ;z80-sio/0 0005 = keyb equ sio1+1 ;CONSOLE keyboard 0001 = ctrlA equ 1 0002 = ctrlB equ 2 0004 = ctrlD equ 4 0005 = ctrlE equ 5 0006 = ctrlF equ 6 0007 = ctrlG equ 7 000A = lf equ 10 000D = cr equ 13 000E = ctrlN equ 14 000F = ctrlO equ 15 0010 = ctrlP equ 16 0011 = ctrlQ equ 17 0012 = ctrlR equ 18 0013 = ctrlS equ 19 0014 = ctrlT equ 20 0015 = ctrlU equ 21 0016 = ctrlV equ 22 0017 = ctrlW equ 23 0018 = ctrlX equ 24 0019 = ctrlY equ 25 001A = cls equ 26 extrn sio1vec cseg ;common memory, other parts in banked. 0000 5800 dw thread 0002 C901 db dbase+dev0,ndev 0004 C30800 jmp intkey 0007 C35B00 jmp instkey 000A C33C00 jmp inputkey 000D C36F00 jmp outstkey 0010 C36600 jmp outputkey 0013 1900 dw strkey 0015 0000 dw tblkey 0017 3B00 dw modkey 0019 4B41595052strkey: db 'KAYPRO ',0,'Keyboard handler ',0,'v3.10' 0038 3065 dw vers 003A 24 db '$' 003B 00823405 modkey: db 00000000b,10000010b,00110100b,keyb ;primary conversion table for cursor and numberpad keys ; --0-- --1-- --2-- --3-- --4-- 003F 0010150000keycnv: db 0,ctrlP,ctrlU, 0, 0 ; B 0044 1617191100 db ctrlV,ctrlW,ctrlY,ctrlQ, 0 ; C 0049 120F060200 db ctrlR,ctrlO,ctrlF,ctrlB, 0 ; D 004E 00010E0714 db 0,ctrlA,ctrlN,ctrlG,ctrlT ; E 0053 0005181304 db 0,ctrlE,ctrlX,ctrlS,ctrlD ; F ; ; * 0 . * * e = enter ; 1 2 3 e * u = up arrow ; 4 5 6 , * d = down ; * 7 8 9 - l = left ; * u d l r r = right ; if int index: lxi d,keybd mov a,e add m mov e,a push psw mov a,m inr a ani bufmsk mov m,a pop psw rnc inr d ret spclRx: sspd ustk lxi sp,istk push psw mvi a,00110000b ;error reset out keyb+2 pop psw lspd ustk ei reti interupt: sspd ustk lxi sp,istk push psw push b push d push h xra a out keyb+2 in keyb+2 bit 7,a jnz break rrc jnc exit lxi h,keypt0 lda keypt1 dcr a ani7 CP/NET 1.2 Status ================= $Requester ID = $ Network Status Byte = $ Disk device status: $ Drive $ = Drive $ on Network Server ID = $ = LOCAL$Console Device = $Console #$ on Network Server ID = $LOCAL$List Device = $List #$ on Network Server ID = $LOCAL$ CP/NET 1.2 has not been loaded.$1?! 9"g!g .> 5ʐͰ"p,Ͱ*p#N <ͰO UͰ!n6 >!nmͰ:nAO͠:͠*n&  ) *pn}2o vͰ:oAO͠:͠Ͱ*n&  ) *p#~O Ͱ!n4†Ͱ" *p n}2o @Ͱ:oOͰ" *p #~O FͰͰ$ *p n}2o ʇͰ:oOͰ$ *p #~O Í ͰÖͰ͛v*g!iq*i&  !kp+q*j      D  E  ͠ ͠!lq> !l:lA O͠ :l0O͠!mq:mO:mOH͠_ {ozg_ {ozg # U ! ">2! }   * |?  W{'_z 'J|g> ?%'%,. Ja  SƐ'@'_ K TPA $ # U ! ">2! }  1b MAIL Version 1.2COPYRIGHT 1982, DIGITAL RESEARCH080282 654321 Waiting for File$ Enter message: $ Must Run Under MP/M or CP/NET. $No More Messages$1b1b -    2      |2b*bM ! ^#V  ʹÊ   "*^#V" *"*~2 .*DM -]! "d  Ê E "Ê'v!6#6 O ! ^#V2c:c ½^  :b“!d6:dҐ 2c:c !d6 Í:cʍ:c2j! "h!c6 >!cs * h> ^*#*c&  *^*c&  *NP X.^j*h*h"h:c<2c*##NP ʇ.Íj! "h*~2j!c6 >!c * h> *c&  *NP .j*h*h"h:c<2c¥ï2d2c:c ^ ! :b!g6 2c !gҿ:cʼ*##:d[ü! "h!f6 :f!gҼ * h> ʧ*f&  *:d§!g6 :f<2f*h*h"hf.:g 2c :c:c2j*dMP j.!g6  R  ʹÿ4*~2j*dMP 1j.ï!d6!g6 :dF:bZ 2cf*~2c!d6 :c v!d6 C:cC!e6! "":eC:b§*#~2fð*##~2f:c2j*fMP :ͷ /  O !  ^#V!e6 +6 !g6,*fMN,,*fMN,*",,7!e6 @jÌA:g/aI    Þ:bž!c6 > !cڞ*c&  *>*c& *w:c<2cnïʹï7Òv*&      ! qI  I  ! 5* &  ) ^#V    !6  :* &  ~=:02 * &  ~! HI* &  ~=: =! p+q* ~=A_  :  ! 6 >! ږ* &  * ^  ! 4p.  ! 6 >! * &  * ^  ! 4£I  ! p+qv  * DMNʹ! p+q  * DMNʹ! p+q  * DMNʹ! 6! 6#6#6 ! 6 > ! O: 2 5* &  *>! 2 ˜! 6 * &  *~2 * & G "*~2 : ր: ֠H* &  *: * &  *>@w* & *>! : <2 A: < ! 6 ! 6 > ! 9 $ : 2 9 * &  *>w >  /L >: ! q.#k -\ : 2 : ҃ : 02kÍ : A 2k: 2 : Ҩ : 02lò : A 2l! 6 j ! 6* Mj 2 : !0 " j 2 >  7H4 * +" > > 1   : ! q: a/>z! /HY : : *&     !6  .$ -† ! 6 #6 ::° *M8 A<2! 6* &   ~.: H!: H * &   N8 * &   w: <2 : <2 ð : <2 ! 6 : !: H_ * &   N8 * &   w: <2 : <2   T  ! 6 !6 2 W ! >~o *&  * &   -¶  *&  6 :<2 : <~O !  *&   - : <<2 T :=o&   6:=o&    6~    ~ : K ! 6 : ~:==o&   * &  ~HҠ : <2 d : ~ :==o&   6:==o&    : w7 ! 6 :=o&   * &  ~ : <2 :=o&   6:=o&    : w    Q Z ! q: <2 O>}Ҿ ! 6  *&  6 :<2O> Ҿ :=o&   6:=o&    6~>:   !6N!6! 6     ! 6 !: }* &   ~7 *&  6 *&   : wc* &    *&  * &  w: <2 * M[ 2 z  *&  * &  6 * M[ 2 ª *&  * &  6 * M[ 2  !6P    !6:<#w* -:b*#~2 (*##~2 !6j# Aj!6 ! 6: ҥ *&  ~l! 6  *&   j" ʔj*#":<2Kj ¸j! q>9! /~0/H: 0: A/>F! /H: A >!6! 6    *M !k ^#Vs*M8 O͹2 s*M8 O͹2 e: *M8 O͹H2 ss%(9h: :   ! q: ҧ: 0_  ö: A_  !6 ! 6j# j*j j>*": ҉ *&   j! €*#" *&  ~i! 6 *"*"j fj}:<2O> }jÆj:ʗjI  *  : O͋: O͋=  ! 6:=! * &   ^  : <2 I  !6 :<2 *&  ~b! 6 >}! _ *&  * &  ^  : <2 ) *&   ~ ! 6  *&   ~=!  *&  * &  ^  : <2 €> :b*#~2 *##~2 * MP j!6 *"*:j" 0j*#"j Mj! q! 6 >x! ڐ! >yO !  ! >}O !  w: <2 W:2O>~Ҥ!6~.N -¬ : 2 : 2 * MP .j.$j -.s - !6 !6 !6 !6 !v6 !x6  5j Hj 2 v:sj sjH: j ‘j ¤.z -¬j j!g6 :c2j*dMP j.i`N#Fog_ ogDM! >)) =_ {ozgi`N#Fogo& og xxMAIL TEX Input Filename: $ Enter Subject: >$ Destination ID: $ ILLEGAL DESTINATION $ Mail From Node #$ Subject: $ $RE: SERVER MAIL DRIVE NOT NETWORKED $ ERROR OPENING FILE $ ERROR READING FILE $ ERROR WRITING FILE $$$$ >$ Mail Program Main Menu Select one of the following: 1 - Broadcast 2 - Send Mail 3 - Receive Mail 4 - Exit From Program$ Select source of message: 1 - File 2 - Console Input$ Select response: 1 - Stop Receiving Mail 2 - Answer Message 3 - Delete Message From Mail File 4 - Answer Message, Then Delete 5 - Re-Examine Last Message 6 - Get Next Message$ f9MAIL Version 1.2COPYRIGHT 1982, DIGITAL RESEARCH0802821l-   2   " |w|¨   : _     ]T ~#fo! ~2 !  : 2 d õE " #~2 !6#6 >ͧ=G==iý͇>ͧ͐:  : 2ý}ʽ 2: G ! * }==#Gͽ "V2 ͇>ͧ_b͐: €: 2: #Gͽý}ʀ2: G: ©x#Gͽ! * : G}x#Gͽ ¶À}2: #Gͽ}ý d: : 2/: ʽ}:2E=ʽ   ý! " " : #Gͭ† >ͧʌ=ʒ=ʘ=ʞ=N* " N/ >/ > N͙ N ͙ N=      _ !#^#V  g   >2  _ !)::0=~==A_ : 0. 0   _  0lJ!   ild! Mls! M >2z2yG 2{* ##~2| #F+XG }»| »>  : 2y:|#~+>@w_:y:{<2z##:{<2{ڑx bufmsk cmp m push psw call index in keyb ani 01111111b stax d pop psw jnz exit gobl: mov a,m dcr a ani bufmsk mov m,a exit: pop h pop d pop b pop psw lspd ustk ei reti break: mvi a,00010000b ;reset ext/status (& break) out keyb+2 in keyb xra a sta keybd sta keypt1 inr a sta keypt0 jmp exit ustk: dw 0 dw 0,0,0,0,0,0,0,0 istk: ds 0 keypt0: db 0 keypt1: db 0 keybd: ds bufsiz endif 0058 = thread equ $ dseg ;banked memory. tblkey: ;initial values only, copied by BIOS to its table. if int db 'IKEYBD',00001011b,6 ;I/O, hard-baud, no protocal, 300 else ;serial 0000 4B45594244 db 'KEYBD ',00001011b,6 ;I/O, hard-baud, no protocal, 300 endif ;serial intkey: if int call is1 lxi h,interupt shld sio1vec+4 lxi h,spclRx shld sio1vec+6 xra a sta keypt0 sta keypt1 mvi a,1 out keyb+2 mvi a,00011100b ;int on receive character, sts eff vect. out keyb+2 ret endif 0008 213D00 is1: lxi h,modkey+2 bit 7,m 000B+CB7E DB 0CBH,7*8+M+40H 000D C0 rnz 000E 7E mov a,m 000F E630 ani 00110000b ; --bb---- bits per char 0011 07 rlc ; -bb----- 0012 5F mov e,a ; Tx image setb 3,e ; Tx Enable 0013+CBDB DB 0CBH,3*8+E+0C0H 0015 07 rlc ; bb------ 0016 F601 ori 00000001b ; Rx Enable 0018 57 mov d,a ; Rx image 0019 7E mov a,m 001A E60F ani 00001111b 001C F640 ori 01000000b ; 16x clock 001E 47 mov b,a ; WR4 image 001F 2B dcx h 0020 7E mov a,m ; 0021 E682 ani 10000010b ; DTR, RTS 0023 B3 ora e 0024 5F mov e,a ; Tx control, with RTS/DTR 0025 23 inx h 0026 23 inx h 0027 4E mov c,m 0028 0C inr c 0029 0C inr c 002A 3E04 mvi a,4 outp a 002C+ED79 DB 0EDH,A*8+41H outp b ; WR4 002E+ED41 DB 0EDH,B*8+41H 0030 3C inr a outp a 0031+ED79 DB 0EDH,A*8+41H outp e ; WR5 0033+ED59 DB 0EDH,E*8+41H 0035 3E03 mvi a,3 outp a 0037+ED79 DB 0EDH,A*8+41H outp d ; WR3 0039+ED51 DB 0EDH,D*8+41H 003B C9 ret inputkey: 003C CD5B00 inp1: call instkey 003F CA3C00 jz inp1 if int lxi h,keypt1 call index ldax d else 0042 DB05 in keyb ; get data endif 0044 B7 ora a 0045 F0 rp 0046 D6B0 sui 0B0H 0048 213F00 lxi h,keycnv ; first loc. is not used 004B 77 mov m,a 004C AF xra a rrd 004D+ED67 DB 0EDH,67H 004F 4E mov c,m 0050 81 add c 0051 81 add c 0052 81 add c 0053 81 add c 0054 81 add c 0055 4F mov c,a 0056 0600 mvi b,0 0058 09 dad b 0059 7E mov a,m 005A C9 ret instkey: if int lxi h,keypt0 lda keypt1 sub m else 005B AF xra a 005C D307 out keyb+2 005E DB07 in keyb+2 ; read from status port 0060 E601 ani 1 ; isolate RxRdy endif 0062 C8 rz ; return with zero 0063 F6FF ori true 0065 C9 ret outputkey: 0066 CD6F00 outp0: call outstkey jrz outp0 ; wait for TxEmpty, HL->port 0069+28FB DB 28H,OUTP0-$-1 006B 79 mov a,c 006C D305 out keyb ; send data 006E C9 ret outstkey: 006F 3E10 mvi a,00010000b ;reset ext/status change 0071 D307 out keyb+2 0073 DB07 in keyb+2 0075 E604 ani 00000100b ; test xmit holding register empty 0077 C8 rz ; 0078 F6FF ori true 007A C9 ret ; return true if ready 007B end 0000 BC 000F BUFMSK 0010 BUFSIZ 001A CLS 000D CR 0001 CTRLA 0002 CTRLB 0004 CTRLD 0005 CTRLE 0006 CTRLF 0007 CTRLG 000E CTRLN 000F CTRLO 0010 CTRLP 0011 CTRLQ 0012 CTRLR 0013 CTRLS 0014 CTRLT 0015 CTRLU 0016 CTRLV 0017 CTRLW 0018 CTRLX 0019 CTRLY 00C8 DBASE 0002 DE 0001 DEV0 0000 FALSE 0004 HL 003C INP1 003C INPUTKEY 005B INSTKEY 0000 INT 0008 INTKEY 0008 IS1 0004 IX 0004 IY 0005 KEYB 003F KEYCNV 000A LF 003B MODKEY 0001 NDEV 0066 OUTP0 0066 OUTPUTKEY 006F OUTSTKEY 0004 SIO1 0000 SIO1VEC 0019 STRKEY 0000 TBLKEY 0058 THREAD FFFF TRUE 6530 VERS ֎ %`U h X dXx xy` v K J"x K2LF 4MCa b`e C@(  pD @  \ K"HDA , ! + +?9K2FNGiA;O.w## :z! # 2222  Y !0  +}…   }e> : _  1   >2  !:_ #6 ! l$ m!::~##A<2l~#. ~# l A ~ ! 2l „ "!44> n! !  *:O ">>~l    [% ~ >§w#>~wu #N #>w#>~wu :<2*#"~*6 :<2 "##"26#6~>D      >N2>2!"##"2     !^ #6 !~_|#*wE*6 *6 (*6#:w>P2W     !6#:O2k     :ʏҏ! :O;ڏ }~   [y^ # # a* *Rʉ "! ! a*#"~  a* " *"  a:a      :    !    !:=O͚   ! ~#p Nr ~#͚~>   c a a>: #G!6  * "" p*#"* Rڿ  p!u !  ! !>z >zw:G: 2x#Gͽɯ222!l$ !-   l A Gl ” :q  pq [ pl [!l  p: 0 i w#w#w#w^#V#Nx{ !my #R R x'G ! y !  ++6 ~#foR}! Dx/ / x   ~# : ~   ; Z x 0N  < [ y 1O xxMAIL TEX Waiting for File$ No More Messages$ Input Filename: $ Enter message: $ Enter Subject: >$ Destination ID: $ ILLEGAL DESTINATION $ Mail From Node #$ Subject: $ Date: $ $RE: SERVER MAIL DRIVE NOT NETWORKED $ ERROR OPENING FILE $ ERROR READING FILE $ ERROR WRITING FILE $$$$ Mail Program Main Menu Select one of the following: 1 - Broadcast 2 - Send Mail 3 - Receive Mail 4 - Exit From Program$ Select source of message: 1 - File 2 - Console Input$ Select response: 1 - Stop Receiving Mail 2 - Answer Message 3 - Delete Message From Mail File 4 - Answer Message, Then Delete 5 - Re-Examine Last Message 6 - Get Next Message$ Must Run Under MP/M or CP/NET. $0  @ *** Reset Failed *** $     @      @ 1!6 : Y!"å:<2O: ڥ*&  ~A/>P/HҢ*&  ~AO !  +s#rY*DMͺµv!p+q*%      i`N#Fog ILLEGAL DESTINATION $ Mail From Node #$ Subject: $ Date: $ $RE: SERVER MAIL DRIVE NOT NETWORKED $ ERROR OPENING FILE ! 91  |g ! ~XO#~ - X[m# m~]X0 Km{__2A 'l"!6u! O ! ^#V͏2: =ʡ0u͏2 *&  ) *" K* #w: ƀ* w$ͨ$ * "  2!K* #w:!ƀ* w$ͨ" * "  2!K* #w:!ƀ* w$- S>1#S>v*!q*&  !p+q*      E *&  ~ ‹!4u!6 :*&  ~2O>Ҷ*M û >!/~:H~[H~]H~=H*&  6!4Ð!4!q*&   :w!4!s+p+q!6 !6 6:!ڌ!q!6 >!z*& **&   q!6 !4+4I:҅:!43> : :ʚ0: A2O>Ҭ0u:!q:A/>F!/H:A :02 ::0A2: 0:  : [H> :  : [HG* Mͳ2: 2 :0: [a:  ^0> u: ]o> : ]* Mͳ:]¤* Mͳo& ))))* Mͳ_ }0u: =¶u_ {ozg^#V|g}o _ {ozgbase+dev0,ndev 0004 C32D00 jmp intsio 0007 C37F00 jmp instsio 000A C37400 jmp inputsio 000D C39C00 jmp outstsio 0010 C39000 jmp outputsio 0013 1900 dw strsio 0015 0000 dw tblsio 0017 3A00 dw modsio 0019 4B41595052strsio: db 'KAYPRO ',0,'Z80-SIO handler ',0,'v3.10' 0037 3065 dw vers 0039 24 db '$' ; 7=DTR, 6=, 5=CTS, 4=sync 3=DCD : 2=, 1=RTS, 0= 003A 20A2340C modsio: db 00100000b,10100010b,00110100b,dce 003E 28AA3404 db 00101000b,10101010b,00110100b,dte 0042 28AA340D db 00101000b,10101010b,00110100b,modem 0046 = thread equ $ dseg ;banked memory. tblsio: ;initial values only, copied by BIOS to its table. 0000 4443452020 db 'DCE ',00001111b,14 ;I/O, soft-baud, no protocal, 9600 0008 4454452020 db 'DTE ',00001111b,14 ;I/O, soft-baud, no protocal, 9600 0010 4D4F44454D db 'MODEM ',00001011b,6 ;I/O, hard-baud, no protocal, 300 ; all serial 0018 78 vector: mov a,b ;device number 0019 D602 sui dev0 001B 87 add a 001C 87 add a ;*4 001D 4F mov c,a 001E 87 add a ;*8 001F 5F mov e,a 0020 0600 mvi b,0 0022 50 mov d,b 0023 210600 lxi h,tblsio+6 0026 19 dad d 0027 EB xchg 0028 213D00 lxi h,modsio+3 002B 09 dad b 002C C9 ret intsio: 002D CD1800 call vector 0030 2B dcx h is1: bit 7,m 0031+CB7E DB 0CBH,7*8+M+40H 0033 C0 rnz 0034 D5 push d 0035 7E mov a,m 0036 E630 ani 00110000b ; bits per char 0038 07 rlc ; -bb----- 0039 5F mov e,a ; Tx image setb 3,e ; Tx Enable 003A+CBDB DB 0CBH,3*8+E+0C0H 003C 07 rlc ; bb------ 003D F601 ori 00000001b ; Rx Enable 003F 57 mov d,a ; Rx image 0040 7E mov a,m 0041 E60F ani 00001111b 0043 F640 ori 01000000b ; 16x clock 0045 47 mov b,a ; WR4 image 0046 2B dcx h 0047 7E mov a,m ; 0048 E682 ani 10000010b ; DTR, RTS 004A B3 ora e 004B 5F mov e,a ; Tx control, with RTS/DTR 004C 23 inx h 004D 23 inx h 004E 4E mov c,m 004F 0C inr c 0050 0C inr c 0051 3E04 mvi a,4 outp a 0053+ED79 DB 0EDH,A*8+41H outp b ; WR4 0055+ED41 DB 0EDH,B*8+41H 0057 3C inr a outp a 0058+ED79 DB 0EDH,A*8+41H outp e ; WR5 005A+ED59 DB 0EDH,E*8+41H 005C 3E03 mvi a,3 outp a 005E+ED79 DB 0EDH,A*8+41H outp d ; WR3 0060+ED51 DB 0EDH,D*8+41H ; init baud rate 0062 4E mov c,m res 2,c ; baud rate port 0063+CB91 DB 0CBH,2*8+C+80H 0065 E1 pop h bit 2,m ; soft baud? 0066+CB56 DB 0CBH,2*8+M+40H 0068 C8 rz 0069 7E mov a,m ; 0; 1,2,3..15 006A B7 ora a 006B C8 rz 006C FE0A cpi 10 ; 1,2,3..15 jrnc is0 006E+3001 DB 30H,IS0-$-1 0070 3D dcr a ; 0,1,2,3,4,5,6,7,8,10,11,12,13,14,15 is0: outp a 0071+ED79 DB 0EDH,A*8+41H 0073 C9 ret inputsio: 0074 CD7F00 inp0: call instsio jrz inp0 ; wait for character ready 0077+28FB DB 28H,INP0-$-1 0079 4E mov c,m inp a ; get data 007A+ED78 DB 0EDH,A*8+40H 007C E67F ani 7Fh ; mask parity 007E C9 ret instsio: 007F CD1800 call vector 0082 4E ins0: mov c,m 0083 0C inr c 0084 0C inr c 0085 AF xra a outp a 0086+ED79 DB 0EDH,A*8+41H inp a ; read from status port 0088+ED78 DB 0EDH,A*8+40H 008A E601 ani 1 ; isolate RxRdy 008C C8 rz ; return with zero 008D F6FF ori true 008F C9 ret outputsio: 0090 79 mov a,c 0091 F5 push psw 0092 CD9C00 outp0: call outstsio jrz outp0 ; wait for TxEmpty, HL->port 0095+28FB DB 28H,OUTP0-$-1 0097 F1 pop psw 0098 4E mov c,m outp a ; send data 0099+ED79 DB 0EDH,A*8+41H 009B C9 ret outstsio: 009C CD1800 call vector 009F 4E os0: mov c,m 00A0 2B dcx h 00A1 2B dcx h 00A2 0C inr c 00A3 0C inr c 00A4 3E10 mvi a,00010000b ;reset ext/status change outp a 00A6+ED79 DB 0EDH,A*8+41H inp a 00A8+ED78 DB 0EDH,A*8+40H 00AA AE xra m 00AB 2B dcx h ; 00AC A6 ana m ; [ZR] = ready 00AD E638 ani 00111000b jrnz nrdy 00AF+2008 DB 20H,NRDY-$-1 inp a 00B1+ED78 DB 0EDH,A*8+40H 00B3 E604 ani 04h ; test xmit holding register empty 00B5 C8 rz ; 00B6 F6FF ori true 00B8 C9 ret ; return true if ready 00B9 AF nrdy: xra a 00BA C9 ret ;speed$table: ; DTE,DCE ;0 db 00h ;no baud rate ;1 db 0 ;50 ;2 db 1 ;75 ;3 db 2 ;110 ;4 db 3 ;134.5 ;5 db 4 ;150 ;6 db 5 ;300 ;7 db 6 ;600 ;8 db 7 ;1200 ;9 db 8 ;1800 ;10 db 10 ;2400 ;11 db 11 ;3600 ;12 db 12 ;4800 ;13 db 13 ;7200 ;14 db 14 ;9600 ;15 db 15 ;19200 00BB end 0000 BC 00C8 DBASE 000C DCE 0002 DE 0002 DEV0 0004 DTE 0000 FALSE 0004 HL 0074 INP0 0074 INPUTSIO 0082 INS0 007F INSTSIO 002D INTSIO 0071 IS0 0031 IS1 0004 IX 0004 IY 000D MODEM 003A MODSIO 0003 NDEV 00B9 NRDY 009F OS0 0092 OUTP0 0090 OUTPUTSIO 009C OUTSTSIO 0004 SIO1 000C SIO2 0019 STRSIO 0000 TBLSIO 0046 THREAD FFFF TRUE 0018 VECTOR 6530 VERS ֎ %`T` h F e xy z@` t K J"x Z 2I<@h0)@ ; $(Bh*p E qE q4D"D 1Cr P` ˬCO@,n 0m;W?9bV~s e ˴Øfp0v]0O/Vn >$i X i\+S9 C2J8  6330 = vers equ '0c' ; December 21, 1985 15:57 drm "CENTR.ASM" ;******************************************************** ; Centronics Printer module for the KAYPRO * ; Copyright (C) 1985 Douglas Miller * ;******************************************************** maclib Z80 0000 = false equ 0 FFFF = true equ not false 00CE = dev0 equ 206 0001 = ndev equ 1 0018 = port equ 018h ;parallel printer port 0014 = sysctl equ 014h ;status/ctrl bits extrn @ctbl,@vect cseg ;common memory, other parts in banked. 0000 3F00 dw thread 0002 CE01 db dev0,ndev 0004 C30800 jmp init 0007 C32800 jmp nullst 000A C30900 jmp nullin 000D C32100 jmp outst 0010 C30C00 jmp output 0013 1900 dw strcnt 0015 0000 dw tblcnt 0017 3B00 dw modcnt 0019 4B41595052strcnt: db 'KAYPRO ',0,'Parallel Printer ',0,'v3.10' 0038 3063 dw vers 003A 24 db '$' 003B 00008018 modcnt: db 00000000b,00000000b,10000000b,port 003F = thread equ $ dseg ;banked memory. tblcnt: ;initial value only, copied by BIOS to its table. 0000 4C50542020 db 'LPT ',00000010b,0 ;Output, no baud, no protocal init: 0008 C9 ret 0009 3E1A nullin: mvi a,1ah 000B C9 ret output: 000C CD2100 outp0: call outst jrz outp0 ; wait for not busy 000F+28FB DB 28H,OUTP0-$-1 0011 79 mov a,c 0012 D318 out port ; send data 0014 F3 di 0015 DB14 in sysctl 0017 E6B7 ani 10110111b 0019 D314ILST:CON: CP/Net is not loaded.$ Illegal parameter specification.$1! 9"! |> ͓"!6 ! ͇O ! ^#VXO ! *> w#6 $ * > w#6 " * > w#6  1#v*!q*&  !p+q*      E *&  ~ 6!4 !6 :*&  ~2O>a*Mf >!/~,H~:H~*H~.H~>H~<H~=H*&  6!4;!4!q*&  :w!4!s+p+q!6 !6 6:!U!q!6 >!C*& **&  :!6 !4+4:N:!4> ::c:A2O>u:_ {ozg^#V|g}o ‡_ {ozg duces the executable machine code file m.COM. A>LINK MYFILE,FILE5[s] The [s] option tells LINK-80 to search FILE5 as a library. LINK-80 combines MYFILE.REL with the referenced subroutines contained in FILE5.REL on the default drive A and produces MYFILE.COM on drive A. ///1LOCAL Syntax: LOCAL local-dev Explanation: The LOCAL command enables a requester to reassign selected I/O back to local from the network. The LOCAL command updates the requester configuration table. local-dev is the specification of a local device such as LST:, A:,... CON:. Example: A>LOCAL P: ///1LOGIN Syntax: LOGIN {password}{[mstrID]} Explanation: The LOGIN command allows a requester to log in to a specified server. A requester must log in before any resources on the server can be accessed. Once a requester has logged in, it is not necessary to log in again even though the requester might power down and then power up again. A requester can only be logged off a server by an explicit LOGOFF command issued from the requester. password is an optional 8 ASCII-character password; the default password is PASSWORD. [mstrID] is an optional two-digit server processor ID; the default is [00]. Not all servers require login. Example: A>LOGIN mypasswd[02] ///1LOGOFF Syntax: LOGOFF {[mstrID]} Explanation: The LOGOFF command allows a requester to log off from a specified server. Once a requester has logged off, the server cannot be accessed again until you issue a LOGIN command. [mstrID] is an optional two-digit server processor ID; the default is [00]. Example: A>LOGOFF [02] ///1mac Syntax: MAC filename {$options} Explanation: MAC, the CP/M 3 macro assembler, reads assembly language statements from a file of type .ASM, assembles the statements, and produces three output files with the input filename and filetypes of .HEX, .PRN, and .SYM. Filename.HEX contains INTEL hexadecimal format object code. Filename.PRN contains an annotated source listing that you can print or examine at the console. Filename.SYM contains a sorted list of symbols defined in the program. ///2Examples A>MAC SAMPLE A>MAC SAMPLE $PB AA HB SX ///2options Use options to direct the input and output of MAC. Use a letter with the option to indicate the source and destination drives, and console, printer, or zero output. Valid drive names are A thru O. X, P and Z specify console, printer, and zero output, respectively. Assembly Options That Direct Input/Output A source drive for .ASM file (A-O) H destination drive for .HEX file (A-O, Z) L source drive for macrolibrary .LIB files called by the MACLIB statement. P destination drive for .PRN file (A-O, X, P, Z) S destination drive for .SYM file Assembly Options That Modify Contents Of Output File +L lists input lines read from macrollibrary .LIB files -L suppresses listing (default) +M lists all macro lines as they are processed during assembly -M suppresses all macro lines as they are read during assembly *M lists only hex generated by macro expansions +Q lists all LOCAL symbols in the symbol list -Q suppresses all LOCAL symbols in the symbol list (default) +S appends symbol file to print file -S suppresses creation of symbol file +1 produces a pass 1 listing for macro debugging in .PRN file -1 suppress listing on pass 1 (default) ///1MODE Syntax: MODE {d:{args}} Explanation: The MODE Command allows showing/configuring of the BIOS operating parameters on a disk drive. args is a comma-separate list of arguments. Valid arguments are: DS or SS = double or single sided QT, DT, ST = quad (192 tpi), double (96 tpi), single (48 tpi), or QTD, QTS, DTS = half track modes e.g. DTS is 48 tpi media in a 96 tpi drive. DD or SD = double or single density S6, S30, etc. = step rate in milliseconds MMS, Z37, Z37X etc. (media formats); the X implies extended format. If no drive (or arguments) is specified, a brief help is shown. Example: A>MODE C: MODE v3.106 PRESENT Configuration is: Drive - C: (33) 5.25 inch floppy Controller - KAYPRO Floppy Disk Controller 3.100d Recording Density - Double Sides - 2 Tracks per Inch - 48 Step Rate - 6 milliseconds Format Type - KAYPRO ///1NETSTAT Syntax: NETSTAT Explanation: The NETSTAT command is a terse version of CPNETSTS. It only shows networked devices. Example: A>NETSTAT CP/NET Status ============= Requester ID = 02H Network Status Byte = 10H Device status: Drive P: = Drive F: on Network Server ID = 00H ///1NETWORK Syntax: NETWORK local-dev=server-dev{[srvrID]} Explanation: The NETWORK command enables a requester to assign selected I/O to the network. The NETWORK command updates the requester Configuration table. local-dev is the specification of a local device such as A:, B: ... P:, CON: or LST:. server-dev is the specification of a server device such as A:, B: ... P: in the case of a disk device, or 0, 1 ... 15 in the case of CON: or LST:. A missing server-dev defaults to 0 in the case of CON: or LST:. [srvrID] is an optional two-digit hexadecimal server processor ID. The default is [00]. Example: A>NETWORK P:=F: ///1NTPDATE Syntax: NTPDATE {server} Explanation: The NTPDATE Command sets the local time to that of the specified server. Default server is 00. Server ID is specified in hexadecimal. Example: A>NTPDATE 2 Time was set to: 04/16/16 18:34:12 ///1PATCH Syntax: PATCH filename{.typ} {n} Explanation: The PATCH command displays or installs patch number n to the CP/M 3 system or command files. The patch number n must be between 1 and 32 inclusive. Example: A>PATCH SHOW 2 Patches the SHOW.COM system file with patch number 2. ///1PIP (copy) Syntax: DESTINATION SOURCE PIP d:{Gn} | filespec{[Gn]} = filespec{[o]},... | d:{[o]} Explanation: The file copy program PIP copies files, combines files, and transfers files between disks, printers, consoles, or other devices attached to your computer. The first filespec is the destination. The second filespec is the source. Use two or more source filespecs separated by commas to combine two or more files into one file. [o] is any combination of the available options. The [Gn] option in the destination filespec tells PIP to copy your file to that user number. PIP with no command tail displays an * prompt and awaits your series of commands, entered and processed one line at a time. The source or destination can be any CP/M 3 logical device. ///2Examples COPY A FILE FROM ONE DISK TO ANOTHER A>PIP b:=a:draft.txt A>PIP b:draft.txt = a: B3>PIP myfile.dat=A:[G9] A9>PIP B:[G3]=myfile.dat COPY A FILE AND RENAME IT A5>PIP newdraft.txt=oldraft.txt C8>PIP b:newdraft.txt=a:oldraft.txt COPY MULTIPLE FILES A>PIP b:=draft.* A>PIP b:=*.* B>PIP b:=c:.*.* C>PIP b:=*.txt[g5] C>PIP a:=*.com[wr] B>PIP a:[g3]=c:*.* COMBINE MULTIPLE FILES A>PIP b:new.dat=file1.dat,file2.dat COPY, RENAME AND PLACE IN USER 1 A>pip newdraft.txt[g1]=oldraft.txt COPY, RENAME AND GET FROM USER 1 A>PIP newdraft.txt=oldraft.txt[g1] COPY TO/FROM LOGICAL DEVICES A>PIP b:funfile.sue=con: A>PIP lst:=con: A>PIP lst:=b:draft.txt[t8] A>PIP prn:=b:draft.txt ///2options PIP OPTIONS A Archive. Copy only files that have been changed since the last copy. C Confirm. PIP prompts for confirmation before each file copy. Dn Delete any characters past column n. E Echo transfer to console. F Filter form-feeds from source data. Gn Get from or go to user n. H Test for valid Hex format. I Ignore :00 Hex data records and test for valid Hex format. K Kill display of filespecs on console. L Translate upper case to lower case. N Number output lines O Object file transfer, ^Z ignored. Pn Set page length to n. (default n=60) Qs^Z Quit copying from source at string s. R Read files that have been set to SYStem. Ss^Z Start copying from the source at the string s. Tn Expand tabs to n spaces. U Translate lower case to upper case. V Verify that data has been written correctly. W Write over Read Only files without console query. Z Zero the parity bit. All options except C,G,K,O,R,V and W force an ASCII file transfer, character by character, terminated by a ^Z. ///1PUT Syntax: PUT CONSOLE {OUTPUT TO} FILE filespec {option} | CONSOLE PUT PRINTER {OUTPUT TO} FILE filespec {option} | PRINTER PUT CONSOLE {OUTPUT TO} CONSOLE PUT PRINTER {OUTPUT TO} PRINTER Explanation: PUT puts console or printer output to a file for the next command entered at the console, until the program terminates. Then console output reverts to the console. Printer output is directed to a file until the program terminates. Then printer output is put back to the printer. PUT with the SYSTEM option directs all subsequent console/printer output to the specified file. This option terminates when you enter the PUT CONSOLE or PUT PRINTER command. ///2Options [ {ECHO | NO ECHO} {FILTER | NO FILTER} | {SYSTEM} ] ECHO specifies that output is echoed to the console. This is the default option when you direct console output to a file. NO ECHO specifies that file output is not echoed to the console. NO ECHO is the default for the PUT PRINTER command. FILTER specifies filtering of control characters, which means that control characters are translated to printable characters. For example, an ESCape character is translated to ^[. NO FILTER means that PUT does not translate control characters. This is the default option. SYSTEM specifies that system output as well out sysctl 001B F608 ori 00001000b 001D D314 out sysctl 001F FB ei 0020 C9 ret outst: 0021 DB14 in sysctl 0023 EE40 xri 01000000b 0025 E640 ani 01000000b 0027 C8 rz 0028 F6FF nullst: ori true 002A C9 ret ; return true if ready 002B end 0000 BC 0002 DE 00CE DEV0 0000 FALSE 0004 HL 0008 INIT 0004 IX 0004 IY 003B MODCNT 0001 NDEV 0009 NULLIN 0028 NULLST 000C OUTP0 000C OUTPUT 0021 OUTST 0018 PORT 0019 STRCNT 0014 SYSCTL 0000 TBLCNT 003F THREAD FFFF TRUE 6330 VERS 0000 @CTBL 0000 @VECT ֎ %`S h ? g Xx  x$@x0` v K J"x P0&a (&㡔 b`c  ĸ P* > 2Y P<6Q̷iQm1c  Q 20 PP'  ; Thread terminator for CP/M 3 I/O modules. cseg ;common memory 0000 0000 dw 0 ;terminate thread 0002 end   as program output is written to the file specified by filespec. Output is written to the file until a subsequent PUT CONSOLE command redirects console output back to the console. ///2Examples A>PUT CONSOLE OUTPUT TO FILE XOUT [ECHO] Directs console output to file XOUT with the output echoed to the console. A>PUT PRINTER OUTPUT TO FILE XOUT A>MYPROG Directs the printer output of program MYPROG to file XOUT. The output is not echoed to the printer. A>PUT PRINTER OUTPUT TO FILE XOUT2 [ECHO,SYSTEM] Directs all printer output to file XOUT2 as well as to the printer (with ECHO option), and the PUT is in effect until you enter a PUT PRINTER OUTPUT TO PRINTER command. A>PUT CONSOLE OUTPUT TO CONSOLE Directs console output back to the console. A>PUT PRINTER OUTPUT TO PRINTER Directs printer output back to the printer. ///1RENAME Syntax: RENAME {new-filespec=old-filespec} Explanation: RENAME lets you change the name of a file in the directory of a disk. To change several filenames in one command use the * or ? wildcards in the file specifications. The RENAME command can be abbreviated REN. REN prompts you for input. ///2Examples A>RENAME NEWFILE.BAS=OLDFILE.BAS The file OLDFILE.BAS changes to NEWFILE.BAS on drive A. A>RENAME The system prompts for the filespecs: Enter New Name:X.PRN Enter Old Name:Y.PRN Y .PRN=X .PRN A> File X.PRN is renamed to Y.PRN on drive A. B>REN A:PRINTS.NEW = PRINCE.NEW The file PRINCE.NEW on drive A changes to PRINTS.NEW on drive A. A>RENAME S*.TEX=A*.TEX The above command renames all the files matching A*.TEX to files with filenames S*.TEX. A>REN B:NEWLIST=B:OLDLIST The file OLDLIST changes to NEWLIST on drive B. Since the second drive specifier, B: is implied by the first one, it is unnecessary in this example. The command line above has the same effect as the following: A>REN B:NEWLIST=OLDLIST or A>REN NEWLIST=B:OLDLIST ///1RMAC Syntax: RMAC filespec {$Rd | $Sd | $Pd} Explanation: RMAC, a relocatable macro assembler, assembles .ASM files of into .REL files that you can link to create .COM files. ///2options RMAC options specify the destination of the output files. Replace d with the destination drive letter for the output files. Option d=output option R- drive for REL file (A-O, Z) S- drive for SYM file (A-O, X, P, Z) P- drive for PRN file (A-O, X, P, Z) A-O specifies drive A-O. X means output to the console. P means output to the printer. Z means zero output. ///2Example A>RMAC TEST $PX SB RB Assembles the file TEST.ASM from drive A, sends the listing file (TEST.PRN) to the console, puts the symbol file (TEST.SYM) on drive B and puts the relocatable object file (TEST.REL) on drive B. ///1RSXRM Syntax: RSXRM name Explanation: The RSXRM Command instructs a cooperating RSX to schedule itself for removal. The target RSX must intercept and understand BDOS function 60 with an RSX PB FUNC of 113 and PARAMETER1 pointing to an 8-character blank-padded string representing the name of the RSX to remove. If an RSX is loaded multiple times, only the first instance will remove itself. Example: A>RSXRM NDOS3 ///1SAVE Syntax: SAVE Explanation: SAVE copies the contents of memory to a file. To use SAVE, first issue the SAVE command, then run your program which reads a file into memory. Your program exits to the SAVE utility which prompts you for a filespec to which it copies the contents of memory, and the beginning and ending address of the memory to be SAVEd. ///2Example A>SAVE Activates the SAVE utility. Now enter the name of the program which loads a file into memory. A>SID dump.com Next, execute the program. #g0 When the program exits, SAVE intercepts the return to the system and prompts the user for the filespec and the bounds of memory to be SAVEd. SAVE Ver 3.0 Enter file (type RETURN to exit):dump2.com If file DUMP2.COM exists already, the system asks: Delete dump2.com? Y Then the system asks for the bounds of memory to be saved: Beginning hex address: 100 Ending hex address: 400 The contents of memory from 100H (Hexadecimal) to 400H is copied to file DUMP2.COM. ///1SET Syntax: SET [options] SET d: [options] SET filespec [options] Explanation: SET initiates password protection and time stamping of files. It also sets the file and drive attributes Read-Write, Read-Only, DIR and SYS. It lets you label a disk and password protect the label. To enable time stamping of files, you must first run INITDIR to format the disk directory. ///2Label Syntax: SET {d:} [NAME=labelname.typ] SET [PASSWORD=password] SET [PASSWORD= ///3Examples A>SET [NAME=DISK100] Labels the disk on the default drive as DISK100. A>SET [PASSWORD=SECRET] Assigns SECRET to the disk label. A>SET [PASSWORD= Nullifies the existing password. ///2Passwords SET [PROTECT=ON] SET [PROTECT=OFF] SET filespec [PASSWORD=password] SET filespec [PROTECT=READ] SET filespec [PROTECT=WRITE] SET filespec [PROTECT=DELETE] SET filespec [PROTECT=NONE] SET filespec [attribute-options] ///3Modes Password Protection Modes Mode Protection READ The password is required for reading, copying writing, deleting or renaming the file. WRITE The password is required for writing, deleting or renaming the file. You do not need a password to read the file. DELETE The password is only required for deleting or renaming the file. You do not need a password to read or modify the file. NONE No password exists for the file. If a password password exists, this modifier can be used to delete the password. ///2Attributes RO sets the file attribute to Read-Only. RW sets the file attribute to Read-Write. SYS sets the file attribute to SYS. DIR sets the file attribute to DIR. ARCHIVE=OFF means that the file has not been backed up (archived). ARCHIVE=ON means that the file has been backed up (archived). The Archive attribute can be turned on by SET or by PIP when copying a group of files with the PIP [A] option. SHOW and DIR display the Archive option. F1=ON|OFF turns on or off the user-definable file attribute F1. F2=ON|OFF turns on or off the user-definable file attribute F2. F3=ON|OFF turns on or off the user-definable file attribute F3. F4=ON|OFF turns on or off the user-definable file attribute F4. ///3Examples SET [PROTECT=ON] Turns on password protection for all the files on the disk. You must turn on password protection before you can assign passwords to files. SET [PROTECT=OFF] Disables password protection for the files on your disk. A>SET MYFILE.TEX [PASSWORD=MYFIL] MYFIL is the password assigned to file MYFILE.TEX. B>SET *.TEX [PASSWORD=SECRET, PROTECT=WRITE] Assigns the password SECRET to all the TEX files on drive B. Each TEX file is given a WRITE protect mode to prevent unauthorized editing. A>SET MYFILE.TEX [RO SYS] Sets MYFILE.TEX to Read-Only and SYStem. ///2Default A>SET [DEFAULT=dd] Instructs the system to use dd as a password if you do not enter a password for a password-protected file. ///2Time-Stamps Syntax: SET [CREATE=ON] SET [ACCESS=ON] SET [UPDATE=ON] Explanation: The above SET commands allow you to keep a record of the time and date of file creation and update, or of the last access and update of your files. ///3Options [CREATE=ON] turns on CREATE time stamps on the disk in the default or specified drive. To record the creation time of a file, the CREATE option must be turned on before the file is created. [ACCESS=ON] turns on ACCESS time stamps on the disk in the default or specified drive. ACCESS and CREATE options are mutually exclusive; only one can be in effect at a time. If you turn on the ACCESS time stamp on a disk that previously had CREATE time stamp, the CREATE time stamp is automatically turned off. [UPDATE=ON] turns on UPDATE time stamps on the disk in the default or specified drive. UPDATE time stamps record the time the file was last modified. ///3Examples A>SET [ACCESS=ON] A>SET [CREATE=ON,UPDATE=ON] ///2Drives Syntax: SET {d:} [RO] SET {d:} [RW] Example: A>SET B: [RO] Sets drive B to Read-Only. ///1SETDEF Syntax: SETDEF { d: {,d: {,d: {,d:}}}} {[ TEMPORARY = d: ] | [ ORDER = (typ {,typ}) ]} SETDEF [DISPLAY | NO DISPLAY] SETDEF [PAGE | NOPAGE] Explanation: SETDEF allows the user to display or define up to four drives for the program search order, the drive for temporary files, and the file type search order. The SETDEF definitions affect only the loading of programs and/or execution of SUBMIT (SUB) files. SETDEF turns on/off the system Display and Console Page modes. When on, the system displays the location and name of programs loaded or SUBmit files executed, and stops after displaying one full console screen of information. ///2Examples A>SETDEF Displays current SETDEF parameters. A>SETDEF [TEMPORARY=C:] Sets disk drive C as the drive to be used for temporary files. A>SETDEF C:,* Tells the system to search for a program on drive C, then, if not found, search for it on the default drive. A>SETDEF [ORDER=(SUB,COM)] Instructs the system to search for a SUB file to execute. If no SUB file is found, search for a COM file. A>SETDEF [DISPLAY] Turns on the system display mode. Henceforth, the system displays the name and location of programs loaded or submit files executed. A>SETDEF [NO DISPLAY] Turns off the system Display mode. ///1SHOW Syntax: SHOW {d:}{[SPACE |LABEL |USERS |DIR |DRIVE]} Explanation: The SHOW command displays the following disk drive information: Access mode and the amount of free disk space Disk label Current user number and Number of files for each user number on the disk Number of free directory entries for the disk Drive characteristics ///2Examples A>SHOW A>SHOW [SPACE] Instructs the system to display access mode and amount of space left on logged-in drives. A>SHOW B: Show access mode for drive B and amount of space left on drive B. A>SHOW B:[LABEL] Displays label information for drive B. A>SHOW [USERS] Displays the current user number and all the users on drive A and the corresponding number of files assigned to them. A>SHOW C:[DIR] Displays the number of free directory entries on drive C. A>SHOW [DRIVE] Displays the drive characteristics of drive A. ///1SID Syntax: SID {pgm-filespec} {,sym-filespec} Explanation: The SID symbolic debugger allows you to monitor and test programs developed for the 8080 microprocessor. SID supports real-time breakpoints, fully monitored execution, symbolic disassembly, assembly, and memory display and fill functions. SID can dynamically load SID utility programs to provide traceback and histogram facilities. ///2Commands Command Meaning As (Assemble) Enter assembly language statements s is the start address Cs{b{,d}} (Call) Call to memory location from SID s is the called address b is the value of the BC register pair d is the value of the DE register pair D{W}{s}{,f} (Display) Display memory in hex and ASCII W is a 16-bit word format s is the start address f is the finish address Epgm-filespec (Load) Load program and symbol table {,sym-filespec} for execution E*sym-filespec (Load) Load a symbol table file Fs,f,d (Fill) Fill memory with constant value s is the start address f is the finish address d is an eight-bit data item G{p}{,a{,b}} (Go) Begin Execution p is a start address a is a temporary breakpoint H (Hex) Displays all symbols with addresses in Hex H.a Displays hex, decimal, and ASCII values of a where a is a symbolic expression Ha,b Computes hex sum and difference of a and b where a and b are symbolic expressions Icommand tail (Input) Input CCP command line L{s}{,f} (List) List 8080 mnemonic instructions s is the start address f is the finish address Ms,h,d (Move) Move Memory Block s is the start address h is the high address of the block d is the destination start address P{p{,c}} (Pass) Pass point set, reset, and display p is a permanent breakpoint address c is initial value of pass counter Rfilespec{,d} (Read) Read Code/Symbols d is an offset to each address S{W}s (Set) Set Memory Values s is address where value is sent W is 16 bit word T{n{,c}} (Trace) Trace Program Execution n is the number of program steps c is the utility entry address. T{W}{n{,c}} (Trace) Trace Without Call W instructs SID not to trace subroutines n is the number of program steps c is the utility entry address U{W}{n{,c}} (Untrace) Monitor Execution without Trace n is the number of program steps c is the utility entry address W instructs SID not to trace subroutines V (Value) Display the value of the next available location in memory (NEXT), the next lS% P h 8 0000 @LPTBL FFFF db 255,255,255,255 0008 FFFFFFFF db 255,255,255,255 000C FFFFFFFF db 255,255,255,255 0010 end S dD$@ @Z 2_ I DCX H 01CC 3AF702 LDA TOPBNK 01CF 57 MOV D,A 01D0 1E00 MVI E,0 01D2 1B DCX D LDDR 01D3+EDB8 DB 0EDH,0B8H NOBNK0: ; BEFORE RUNNING OS, PATCH LOGICAL-PHYSICAL DRIVE TABLE. 01D5 CDBB02 CALL SETLPD ; 01D8 2AF902 LHLD CSTART 01DB E9 PCHL LOADF: ;ORA A ;DE = TOP ADDRESS (MAX+1) ;MOV D,A ;MVI E,0 01DC 7C MOV A,H 01DD 17 RAL 01DE 67 MOV H,A 01DF EB READ0: XCHG 01E0 0180FF LXI B,-128 01E3 09 DAD B 01E4 EB XCHG 01E5 D5 PUSH D 01E6 E5 PUSH H 01E7 CDF401 CALL DMASET 01EA CDFA01 CALL READFILE 01ED E1 POP H 01EE D1 POP D 01EF 25 DCR H 01F0 C2DF01 JNZ READ0 01F3 C9 RET 01F4 0E1A DMASET: MVI C,SDMA 01F6 CD0500 CALL BDOS 01F9 C9 RET READFILE: 01FA 0E14 MVI C,READ 01FC 11D102 LXI D,CPM3$SYS 01FF CD0500 CALL BDOS 0202 B7 ORA A 0203 117D03 LXI D,RDERR 0206 C8 RZ 0207 0E09 ERRMSG: MVI C,MSGOUT 0209 CD0500 CALL BDOS 020C C30000 JMP CPM CHKUNI: 020F 21F8FF LXI H,0FFF8H 0212 7E MOV A,M 0213 23 INX H 0214 FE32 CPI '2' 0216 C0 RNZ 0217 7E MOV A,M 0218 23 INX H 0219 FE2E CPI '.' 021B C0 RNZ 021C 7E MOV A,M 021D 23 INX H 021E FE30 CPI '0' 0220 C0 RNZ 0221 7E MOV A,M 0222 23 INX H 0223 FE31 CPI '1' 0225 C9 RET ; HL = PROSPECTIVE LOCATION CHKSIG: 0226 11FF02 LXI D,SIGNATURE 0229 060F MVI B,SIGLEN 022B 1A CHK0: LDAX D 022C BE CMP M 022D C0 RNZ 022E 23 INX H 022F 13 INX D DJNZ CHK0 0230+10F9 DB 10H,CHK0-$-1 0232 AF XRA A 0233 C9 RET ROM20: 0234 219AFE LXI H,0FE9AH 0237 224A03 SHLD ROMCRT 023A 3E55 MVI A,'U' 023C 324603 STA ROMID 023F 0603 MVI B,3 ; START OUT ASSUMING FLOPPY-ONLY 0241 3AF7FF LDA 0FFF7H 0244 FEFF CPI 0FFH ; FLOPPY-ONLY 0246 215603 LXI H,LPDFPY ; FLOPPY ONLY 0249 3AF4FF LDA 0FFF4H ; DRIVE A JRZ ROMZZ$FF 024C+280F DB 28H,ROMZZ$FF-$-1 024E 0601 MVI B,1 ; FLOPPY/WIN, MUST NOT TOUCH DS2 (WD1002 RESET) 0250 E60C ANI 00001100B 0252 215303 LXI H,LPDWIN1 ; FLOPPY, WIN [,WIN] JRNZ ROMZZ$FF 0255+2006 DB 20H,ROMZZ$FF-$-1 ; WIN, [WIN,] FLOPPY 0257 215003 LXI H,LPDWIN0 ; WIN, [WIN,] FLOPPY 025A 3AF6FF LDA 0FFF6H ; DRIVE C (FLOPPY) ROMZZ$FF: 025D 0F RRC 025E 0F RRC 025F E603 ANI 00000011B 0261 EE03 XRI 00000011B ; 0=ERROR, 1=ST, 2=QT 0263 324E03 STA FPYTYP 0266 78 MOV A,B 0267 324F03 STA FPYSEL ROMZZ$1: 026A 224C03 SHLD LPTBL 026D C32F01 JMP GOTROM ROM17: ; 81-326, VERSION 1.7R 0270 2100F8 LXI H,0F800H 0273 224A03 SHLD ROMCRT 0276 3A81F8 LDA 0F881H ; 02 = QT, 01 = ST 0279 324E03 STA FPYTYP 027C 3E32 MVI A,'2' ; CORRECT? JR ROMXX$0 ; FLOPPY-ONLY 027E+182E DB 18H,ROMXX$0-$-1 ROM19: ; 81-302C, 81-277, 81-188, VERSION SERIES 1.9 0280 215CFD LXI H,0FD5CH 0283 224A03 SHLD ROMCRT 0286 3E33 MVI A,'3' 0288 324603 STA ROMID ; ALL FLOPPIES ARE ST... 028B 3E01 MVI A,1 028D 324E03 STA FPYTYP 0290 324F03 STA FPYSEL ; GET FLOPPY/WIN DETERMININATION ; 0F700H: CUR DSK TYPE, 0=WIN, (FF) FLOPPY ocation after the largest file read in (MSZE), the current value of the Program counter (PC), and the address of the end of available memory (END) Wfilespec,s,f (Write) Write the contents of a contiguous block of memory to filespec. f is finish address X{f}{r} (Examine) Examine/alter CPU state. f is flag bit C,Z,M,E or I. r is register A,B,D,H,S or P. ///2Examples A>SID CP/M 3 loads SID from drive A into memory. SID displays the # prompt when it is ready to accept commands. A>B:SID SAMPLE.HEX CP/M 3 loads SID and the program file SAMPLE.HEX into memory from drive B. ///2Utilities SID utilities, HIST.UTL and TRACE.UTL are special programs that operate with SID to provide additional debugging facilities. The mechanisms for system initialization, data collection, and data display are described in the CP/M SID User's Guide. The HIST utility creates a histogram (bar graph) showing the relative frequency of execution of code within selected program segments of the test program. The HIST utility allows you to monitor those sections of code that execute most frequently. The TRACE utility obtains a backtrace of the instructions that led to a particular breakpoint address in a program under test. You can collect the addresses of up to 256 instructions between pass points in U or T modes. ///1SUBMIT Syntax: SUBMIT {filespec} {argument} ... {argument} Explanation: The SUBMIT command lets you execute a group (batch) of commands from a SUBmit file (a file with filetype of SUB). ///2Subfile The SUB file can contain the following types of lines: Any valid CP/M 3 command Any valid CP/M 3 command with SUBMIT parameters ($0-$9) Any data input line Any program input line with parameters ($0 to $9) The command line cannot exceed 135 characters. The following lines illustrate the variety of lines which may be entered in a SUB file: DIR DIR *.BAK MAC $1 $$$4 PIP LST:=$1.PRN[T$2 $3 $5] DIR *.ASM PIP SUBMIT A>SUBMIT SUBA A>SUBMIT AA ZZ SZ A>SUBMIT B:START DIR E: ///2PROFILE.SUB Everytime you power up or reset your computer, CP/M 3 looks for a special SUBmit file named PROFILE.SUB to execute. If it does not exist, CP/M 3 resumes normal operation. If the PROFILE.SUB file exists, the system executes the commands in the file. This file is convenient to use if you regularly execute a set of commands before you do your regular session on the computer. ///1TPA Syntax: TPA Explanation: The TPA Command displays the amount of memory available for TPA. The amount of memory is a direct translation of the current BDOS entry page, including any active RSXs. This can be used to determine if RSXs are resident, by comparing the TPA to the value seen immediately after boot. Example: A>TPA 57.25K TPA ///1TR Syntax: TR d:{filespec}=filespec[C|U] Explanation: The TR Command copies one or more files and translates line endings between Unix and CP/M conventions. The option C causes every line feed character to be prefixed with a carriage return, unless already present. The U option removes all carriage returns from the file. Neither source nor destination drive is required to be networked, although that would be the normal case. The source filespec cannot be ambiguous if a destination filespec in given. Example: A>TR C:=P:*.ASM[C] ///1TYPE Syntax: TYPE {filespec {[ PAGE | NOPAGE ]}} Explanation: The TYPE command displays the contents of an ASCII character file on your screen. [PAGE] Causes the console listing to be displayed in paged mode; i.e., stop automatically after listing n lines of text, where n normally defaults to 24 lines per page. [NOPAGE] Turns off Console Page Mode and continuously displays a typed file on the screen. ///2Examples A>TYPE MYPROG.PLI Displays the contents of the file MYPROG.PLI on your screen. A>TYPE B:THISFILE [PAGE] Displays the contents of the file THISFILE from drive B on your screen twenty four lines at a time. ///1USER Syntax: USER {number} Explanation: The USER command sets the current user number. The disk directory can be divided into distinct groups according to a "User Number." User numbers range from 0 through 15. ///2Examples A>USER Enter User#:5 5A> The current user number is now 5 on drive A. A>USER 3 3A> This command changes the current User Number to 3. ///1XREF Syntax: XREF {d:} filename {$P} Explanation: XREF provides a cross-reference summary of variable usage in a program. XREF requires the .PRN and .SYM files produced by MAC or RMAC for input to the program. The SYM and PRN files must have the same filename as the filename in the XREF command tail. XREF outputs a file of type .XRF. Examples: A>XREF b:MYPROG A>XREF b:MYPROG $P d fill functions. SID can dynamically load SID utility programs to provide traceback and histogram facilities. ///2Commands Command Meaning As (Assemble) Enter assembly language statements s is the start address Cs{b{,d}} (Call) Call to memory location from SID s is the called address b is the value of the BC register pair d is the value of the DE register pair D{W}{s}{,f} (Display) Display memory in hex and ASCII W is a 16-bit word format s is the start address f is the finish address Epgm-filespec (Load) Load program and symbol table {,sym-filespec} for execution E*sym-filespec (Load) Load a symbol table file Fs,f,d (Fill) Fill memory with constant value s is the start address f is the finish address d is an eight-bit data item G{p}{,a{,b}} (Go) Begin Execution p is a start address a is a temporary breakpoint H (Hex) Displays all symbols with addresses in Hex H.a Displays hex, decimal, and ASCII values of a where a is a symbolic expression Ha,b Computes hex sum and difference of a and b where a and b are symbolic expressions Icommand tail (Input) Input CCP command line L{s}{,f} (List) List 8080 mnemonic instructions s is the start address f is the finish address Ms,h,d (Move) Move Memory Block s is the start address h is the high address of the block d is the destination start address P{p{,c}} (Pass) Pass point set, reset, and display p is a permanent breakpoint address c is initial value of pass counter Rfilespec{,d} (Read) Read Code/Symbols d is an offset to each address S{W}s (Set) Set Memory Values s is address where value is sent W is 16 bit word T{n{,c}} (Trace) Trace Program Execution n is the number of program steps c is the utility entry address. T{W}{n{,c}} (Trace) Trace Without Call W instructs SID not to trace subroutines n is the number of program steps c is the utility entry address U{W}{n{,c}} (Untrace) Monitor Execution without Trace n is the number of program steps c is the utility entry address W instructs SID not to trace subroutines V (Value) Display the value of the next available location in memory (NEXT), the next location after the largest file read in (MSZE), the current value of the Program counter (PC), and the address of the end of available memory (END) Wfilespec,s,f (Write) Write the contents of a contiguous block of memory to filespec. f is finish address X{f}{r} (Examine) Examine/alter CPU state. f is flag bit C,Z,M,E or I. r is register A,B,D,H,S or P. ///2Examples A>SID CP/M 3 loads SID from drive A into memory. SID displays the # prompt when it is ready to accept commands. A>B:SID SAMPLE.HEX CP/M 3 loads SID and the program file SAMPLE.HEX into memory from drive B. ///2Utilities SID utilities, HIST.UTL and TRACE.UTL are special programs that operate with SID to provide additional debugging facilities. The mechanisms for system initialization, data collection, and data display are described in the CP/M SID User's Guide. The HIST utility creates a histogram (bar graph) showing the relative frequency of execution of code within selected program segments of the test program. The HIST utility allows you to monitor those sections of code that execute most frequently. The TRACE utility obtains a backtrace of the instructions that led to a particular breakpoint address in a program under test. You can collect the addresses of up to 256 instructions between pass points in U or T modes. ///1SUBMIT Syntax: SUBMIT {filespec} {argument} ... {argument} Explanation: The SUBMIT command lets you execute a group (batch) of commands from a SUBmit file (a file with filetype of SUB). ///2Subfile The SUB file can contain the following types of lines: Any valid CP/M 3 command Any valid CP/M 3 command with SUBMIT parameters ($0-$9) Any data input line Any program input line with parameters ($0 to $9) The command line cannot exceed 135 characters. The following lines illustrate the variety of lines which may be entered in a SUB file: DIR DIR *.BAK MAC $1 $$$4 PIP LST:=$1.PRN[T$2 $3 $5] DIR *.ASM PIP SUBMIT A>SUBMIT SUBA A>SUBMIT AA ZZ SZ A>SUBMIT B:START DIR E: ///2PROFILE.SUB Everytime you power up or reset your computer, CP/M 3 looks for a special SUBmit file named PROFILE.SUB to execute. If it does not exist, CP/M 3 resumes normal operation. If the PROFILE.SUB file exists, the system executes the commands in the file. This file is convenient to use if you regularly execute a set of commands before you do your regular session on the computer. ///1TPA Syntax: TPA Explanation: The TPA Command displays the amount of memory available for TPA. The amount of memory is a direct translation of the current BDOS entry page, including any active RSXs. This can be used to determine if RSXs are resident, by comparing the TPA to the value seen immediately after boot. Example: A>TPA 57.25K TPA ///1TR Syntax: TR d:{filespec}=filespec[C|U] Explanation: The TR Command copies one or more files and translates line endings between Unix and CP/M conventions. The option C causes every line feed character to be prefixed with a carriage return, unless already present. The U option removes all carriage returns from the file. Neither source nor destination drive is required to be networked, although that would be the normal case. The source filespec cannot be ambiguous if a destination filespec in given. Example: A>TR C:=P:*.ASM[C] ///1TYPE Syntax: TYPE {filespec {[ PAGE | NOPAGE ]}} Explanation: The TYPE command displays the contents of an ASCII character file on your screen. [PAGE] Causes the console listing to be displayed in paged mode; i.e., stop automatically after listing n lines of text, where n normally defaults to 24 lines per page. [NOPAGE] Turns off Console Page Mode and continuously displays a typed file on the screen. ///2Examples A>TYPE MYPROG.PLI Displays the contents of the file MYPROG.PLI on your screen. A>TYPE B:THISFILE [PAGE] Displays the contents of the file THISFILE from drive B on your screen twenty four lines at a time. ///1USER Syntax: USER {number} Explanation: The USER command sets the current user number. The disk directory can be divided into distinct groups according to a "User Number." User numbers range from 0 through 15. ///2Examples A>USER Enter User#:5 5A> The current user number is now 5 on drive A. A>USER 3 3A> This command changes the current User Number to 3. ///1XREF Syntax: XREF {d:} filename {$P} Explanation: XREF provides a cross-reference summary of variable usage in a program. XREF requires the .PRN and .SYM files produced by MAC or RMAC for input to the program. The SYM and PRN files must have the same filename as the filename in the XREF command tail. XREF outputs a file of type .XRF. Examples: A>XREF b:MYPROG A>XREF b:MYPROG $P 14!"&p!&ʀ!&ʡ  &     Y !     :W !":ʑW *"*J@  :F:N:O:G *+:W :G *+:W ͻ*|g %  }  !~#2~#.~#0~#1#!"J>U2F:!V:( !S !P:2Nx2O"L/! "J:2N>2.!\"J>32F>2N2O:!S !P!t"J>2N>22F>2O!V*d ^#V*L| CPM3 SYS ˿Unknown ROM version! $LDCPM3 vers 3.100e - Got ROM id . $ 23!!23!"# error: File not found: CPM3.SYS $ error: Read failure: CPM3.SYS $ inch floppy $8 inch floppy $ Controller - $ Sides - 1 $ Sides - 2 $Recording Density - Single $Recording Density - Double $ Tracks per Inch - 48 $ Tracks per Inch - 96 $ Tracks per Inch - 192 $ Tracks per Inch - 48KS PTRTBL: 00EA 00040011 DB 00000000b,00000100B,00000000B,00010001B ; 5" mms,dd,ss,st 00EE 00000000 dw mms0,0 00F2 00040051 DB 00000000b,00000100B,00000000B,01010001B ; 5" mms,dd,ds,st 00F6 11000000 dw mms1,0 00FA 00040031 DB 00000000b,00000100B,00000000B,00110001B ; 5" mms,dd,ss,dt 00FE 22000000 dw mms2,0 0102 00040071 DB 00000000b,00000100B,00000000B,01110001B ; 5" mms,dd,ds,dt 0106 33000000 dw mms3,0 010A 00080081 DB 00000000b,00001000B,00000000B,10000001B ; z37,sd,ss,st 010E 44000000 dw z370,0 0112 00080091 DB 00000000b,00001000B,00000000B,10010001B ; z37,dd,ss,st 0116 55000000 dw z371,0 011A 00100091 DB 00000000b,00010000B,00000000B,10010001B ; z37x,dd,ss,st 011E 66000000 dw z372,0 0122 000800C3 DB 00000000b,00001000B,00000000B,11000011B ; z37,sd,ds,st 0126 77000000 dw z373,0 012A 000800D3 DB 00000000b,00001000B,00000000B,11010011B ; z37,dd,ds,st 012E 88000000 dw z374,0 0132 001000D3 DB 00000000b,00010000B,00000000B,11010011B ; z37x,dd,ds,st 0136 99000000 dw z375,0 013A 000800A1 DB 00000000b,00001000B,00000000B,10100001B ; z37,sd,ss,dt 013E AA000000 dw z376,0 0142 000800B1 DB 00000000b,00001000B,00000000B,10110001B ; z37,dd,ss,dt 0146 BB000000 dw z377,0 014A 001000B1 DB 00000000b,00010000B,00000000B,10110001B ; z37x,dd,ss,dt 014E CC000000 dw z378,0 0152 000800E3 DB 00000000b,00001000B,00000000B,11100011B ; z37,sd,ds,dt 0156 DD000000 dw z379,0 015A 000800F3 DB 00000000b,00001000B,00000000B,11110011B ; z37,dd,ds,dt 015E EE000000 dw z37a,0 0162 001000F3 DB 00000000b,00010000B,00000000B,11110011B ; z37x,dd,ds,dt 0166 FF000000 dw z37b,0 016A 00200091 DB 00000000b,00100000B,00000000B,10010001B ; z100,dd,ss,st 016E 10010000 dw z100a,0 0172 002000D3 DB 00000000b,00100000B,00000000B,11010011B ; z100,dd,ds,st 0176 21010000 dw z100b,0 017A 002000B1 DB 00000000b,00100000B,00000000B,10110001B ; z100,dd,ss,dt 017E 32010000 dw z100c,0 0182 002000F3 DB 00000000b,00100000B,00000000B,11110011B ; z100,dd,ds,dt 0186 43010000 dw z100d,0 018A 00400055 DB 00000000b,01000000B,00000000B,01010101B ; 5" EPSON,dd,ds,st 018E 54010000 dw epson,0 0192 00800057 DB 00000000b,10000000B,00000000B,01010111B ; 5" GNAT,dd,ds,st 0196 65010000 dw gnat,0 019A 00010018 DB 00000000b,00000001B,00000000B,00011000B ; 5" KAYPRO dd,ss,st 019E 76010000 dw kaypro0,0 01A2 00010058 DB 00000000b,00000001B,00000000B,01011000B ; 5" KAYPRO dd,ds,st 01A6 87010000 dw kaypro1,0 01AA 00010173 DB 00000000b,00000001b,00000001b,01110011b ; 5" KAYPRO qd,ds,qt 01AE 9801A901 dw kaypro3,kpqtx 01B2 FF DB 11111111B ;FLAG FOR END OF TABLE $*MACRO dseg ;DPBs and SECTRN tables in banked mem MMS0: calcdpb 36,16, 83, 96,3,512,0 0000+2400 0002+040F01 0005+52005F00 0009+C000 000B+18000300 000F+0203 MMS1: calcdpb 36,16,173, 96,3,512,0 0011+2400 0013+040F01 0016+AC005F00 001A+C000 001C+18000300 0020+0203 MMS2: calcdpb 36,32, 86,128,3,512,0 0022+2400 0024+051F03 0027+55007F00 002B+8000 002D+20000300 0031+0203 MMS3: calcdpb 36,32,176,128,3,512,0 0033+2400 0035+051F03 0038+AF007F00 003C+8000 003E+20000300 0042+0203 Z370: calcdpb 20, 8, 92, 64,3,256,0 0044+1400 0046+030700 0049+5B003F00 004D+C000 004F+10000300 0053+0101 Z371: calcdpb 32, 8,152,128,2,256,0 0055+2000 0057+030700 005A+97007F00 005E+F000 0060+20000200 0064+0101 Z372: calcdpb 40, 8,186,128,2,1024,0 0066+2800 0068+030700 006B+B9007F00 006F+F000 0071+20000200 0075+0307 Z373: calcdpb 20, 8,188,128,3,256,0 0077+1400 0079+030700 007C+BB007F00 0080+F000 0082+20000300 0086+0101 Z374: calcdpb 32,16,156,256,2,256,0,@ 0088+2000 008A+040F00 008D+9B00FF00 0091+F000 0093+40000200 0097+0101 Z375: calcdpb 40,16,195,256,2,1024,0,@ 0099+2800 009B+040F00 009E+C200FF00 00A2+F000 00A4+40000200 00A8+0307 Z376: calcdpb 20, 8,192, 64,3,256,0 00AA+1400 00AC+030700 00AF+BF003F00 00B3+C000 00B5+10000300 00B9+0101 Z377: calcdpb 32,16,156,128,2,256,0 00BB+2000 00BD+040F01 00C0+9B007F00 00C4+C000 00C6+20000200 00CA+0101 Z378: calcdpb 40,16,195,128,2,1024,0 00CC+2800 00CE+040F01 00D1+C2007F00 00D5+C000 00D7+20000200 00DB+0307 Z379: calcdpb 20,16,196,128,3,256,0 00DD+1400 00DF+040F01 00E2+C3007F00 00E6+C000 00E8+20000300 00EC+0101 Z37A: calcdpb 32,16,316,256,2,256,0 00EE+2000 00F0+040F00 00F3+3B01FF00 00F7+F000 00F9+40000200 00FD+0101 Z37B: calcdpb 40,16,395,256,2,1024,0 00FF+2800 0101+040F00 0104+8A01FF00 0108+F000 010A+40000200 010E+0307 Z100a: calcdpb 32, 8,152,128,2,512,0 ;; 5" disks 0110+2000 0112+030700 0115+97007F00 0119+F000 011B+20000200 011F+0203 Z100b: calcdpb 32,16,156,256,2,512,0,@ 0121+2000 0123+040F00 0126+9B00FF00 012A+F000 012C+40000200 0130+0203 Z100c: calcdpb 32,16,156,128,2,512,0 0132+2000 0134+040F01 0137+9B007F00 013B+C000 013D+20000200 0141+0203 Z100d: calcdpb 32,16,316,256,2,512,0 0143+2000 0145+040F00 0148+3B01FF00 014C+F000 014E+40000200 0152+0203 epson: calcdpb 80,16,190,128,2,512,0 0154+5000 0156+040F01 0159+BD007F00 015D+C000 015F+20000200 0163+0203 gnat: calcdpb 80,16,169,128,1,512,0,@ 0165+5000 0167+040F00 016A+A8007F00 016E+C000 0170+20000100 0174+0203 kaypro0: calcdpb 40,8,195,64,1,512,64 0176+2800 0178+030700 017B+C2003F00 017F+F000 0181+10000100 0185+0203 kaypro1: calcdpb 40,16,197,64,1,512,64 0187+2800 0189+040F01 018C+C4003F00 0190+C000 0192+10000100 0196+0203 ;drop support for expanded-directory format - risky anyway. ;kaypro2: calcdpb 40,16,197,128,1,512,0 kaypro3: calcdpb 68,16,1351,1024,2,512,0 0198+4400 019A+040F00 019D+4605FF03 01A1+FFFF 01A3+00010200 01A7+0203 ; ; NOTE: skew tables are for physical sector numbers. ; 01A9 01060B1004kpqtx: db 1,6,11,16,4,9,14,2,7,12,17,5,10,15,3,8,13 01BA end 82 4D4D532020 db 'MMS ' ; 2 008A 5A33372020 db 'Z37 ' ; 3 0092 5A33375820 db 'Z37X ' ; 4 009A 5A31303020 db 'Z100 ' ; 5 00A2 4550534F4E db 'EPSON ' ; 6 00AA 4153534F43 db 'ASSOC ' ; 7 00B2 464D543820 db 'FMT8 ' ; 8 00BA 464D543920 db 'FMT9 ' ; 9 00C2 464D543130 db 'FMT10 ' ; 10 00CA 464D543131 db 'FMT11 ' ; 11 00D2 464D543132 db 'FMT12 ' ; 12 00DA 464D543133 db 'FMT13 ' ; 13 00E2 464D543134 db 'FMT14 ' ; 14 ; ;---------------------------------------------------------------------- ; ; ;---------------------------------------------------------------------- ; ; 0081 = SRM0: equ 10000001B ; 0070 = SRM1: equ 01110000B ;SEARCH MODES MASKS 0000 = XSM0: equ 00000000B ; 008F = XSM1: equ 10001111B ;EXCESS MODES MAS֎ ctUDEMIBQt5 ]@ K0ޠ+T##d |F~s B #s Wbp]2#'ηFu_oK4 2# xX- db1F#??{Br +ǬYP)8S"i4 n nX`0)@O' LO!148149141141141141141    (  q  8    U  G3 @ i  (uP  :     w  @ i ,q  y   \  e  c;  @ s :.  H _ 0   @xX /   Ā (|U   b@ >W @  @0       @ P      x    l <    @x    €   @  @" M @  @   08P X`  ` @   ( P x    `p\  <    @x6     <   b  _  @2  @ @     P    (  ~ `   "    @((cQB: T' 0000B,10100001B ; z37,sd,ss,dt 013E AA000000 dw z376,0 0142 000800B1 DB 00000000b,00001000B,00000000B,10110001B ; z37,dd,ss,dt 0146 BB000000 dw z377,0 014A 001000B1 DB 00000000b,00010000B,00000000B,10110001B ; z37x,dd,ss,dt 014E CC000000 dw z378,0 0152 000800E3 DB 00000000b,00001000B,00000000B,11100011B ; z37,sd,ds,dt 0156 DD000000 dw z379,0 015A 000800F3 DB 00000000b,00001000B,00000000B,11110011B ; z37,dd,ds,dt 015E EE000000 dw z37a,0 0162 001000F3 DB 00000000b,00010000B,00000000B,11110011B ; z37x,dd,ds,dt 0166 FF000000 dw z37b,0 016A 00200091 DB 00000000b,00100000B,00000000B,10010001B ; z100,dd,ss,st 016E 10010000 dw z100a,0 0172 002000D3 DB 00000000b,00100000B,00000000B,11010011B ; z100,dd,ds,st 0176 21010000 dw z100b,0 017A 002000B1 DB 00000000b,00100000B,00000000B,10110001B ; z100,dd,ss,dt 017E 32010000 dw z100c,0 0182 002000F3 DB 00000000b,00100000B,00000000B,11110011B ; z100,dd,ds,dt 0186 43010000 dw z100d,0 018A 00400055 DB 00000000b,01000000B,00000000B,01010101B ; 5" EPSON,dd,ds,st 018E 54010000 dw epson,0 0192 00800057 DB 00000000b,10000000B,00000000B,01010111B ; 5" GNAT,dd,ds,st 0196 65010000 dw gnat,0 019A 00010018 DB 00000000b,00000001B,00000000B,00011000B ; 5" KAYPRO dd,ss,st 019E 76010000 dw kaypro0,0 01A2 00010058 DB 00000000b,00000001B,00000000B,01011000B ; 5" KAYPRO dd,ds,st 01A6 87010000 dw kaypro1,0 01AA 00010173 DB 00000000b,00000001b,00000001b,01110011b ; 5" KAYPRO qd,ds,qt 01AE 98010000 dw kaypro3,0 01B2 FF DB 11111111B ;FLAG FOR END OF TABLE $*MACRO dseg ;DPBs and SECTRN tables in banked mem MMS0: calcdpb 36,16, 83, 96,3,512,0 0000+2400 0002+040F01 0005+52005F00 0009+C000 000B+18000300 000F+0203 MMS1: calcdpb 36,16,173, 96,3,512,0 0011+2400 0013+040F01 0016+AC005F00 001A+C000 001C+18000300 0020+0203 MMS2: calcdpb 36,32, 86,128,3,512,0 0022+2400 0024+051F03 0027+55007F00 002B+8000 002D+20000300 0031+0203 MMS3: calcdpb 36,32,176,128,3,512,0 0033+2400 0035+051F03 0038+AF007F00 003C+8000 003E+20000300 0042+0203 Z370: calcdpb 20, 8, 92, 64,3,256,0 0044+1400 0046+030700 0049+5B003F00 004D+C000 004F+10000300 0053+0101 Z371: calcdpb 32, 8,152,128,2,256,0 0055+2000 0057+030700 005A+97007F00 005E+F000 0060+20000200 0064+0101 Z372: calcdpb 40, 8,186,128,2,1024,0 0066+2800 0068+030700 006B+B9007F00 006F+F000 0071+20000200 0075+0307 Z373: calcdpb 20, 8,188,128,3,256,0 0077+1400 0079+030700 007C+BB007F00 00800000 BC 0002 DE 0154 EPSON 000A GD1 0165 GNAT 0023 GOT1 0004 HL 0004 IX 0004 IY 0176 KAYPRO0 0187 KAYPRO1 0198 KAYPRO3 01A9 KPQTX 0000 MMS0 0011 MMS1 0022 MMS2 0033 MMS3 005F NXD1 0060 NXD2 0061 NXD3 001A NXDPB 00EA PTRTBL 0081 SRM0 0070 SRM1 0072 STRTBL 0000 XSM0 008F XSM1 0110 Z100A 0121 Z100B 0132 Z100C 0143 Z100D 0044 Z370 0055 Z371 0066 Z372 0077 Z373 0088 Z374 0099 Z375 00AA Z376 00BB Z377 00CC Z378 00DD Z379 00EE Z37A 00FF Z37B 0007 ?GETDP 0000 ?SERDP FFFF @  Z377: calcdpb 32,16,156,128,2,256,0 00BB+2000 00BD+040F01 00C0+9B007F00 00C4+C000 00C6+20000200 00CA+0101 Z378: calcdpb 40,16,195,128,2,1024,0 00CC+2800 00CE+040F01 00D1+C2007F00 00D5+C000 00D7+20000200 00DB+0307 Z379: calcdpb 20,16,196,128,3,256,0 00DD+1400 00DF+040F01 00E2+C3007F00 00E6+C000 00E8+20000300 00EC+0101 Z37A: calcdpb 32,16,316,256,2,256,0 00EE+2000 00F0+040F00 00F3+3B01FF00 00F7+F000 00F9+40000200 00FD+0101 Z37B: calcdpb 40,16,395,256,2,1024,0 00FF+2800 0101+040F00 0104+8A01FF00 0108+F000 010A+40000200 010E+0307 Z100a: calcdpb 32, 8,152,128,2,512,0 ;; 5" disks 0110+2000 0112+030700 0115+97007F00 0119+F000 011B+20000200 011F+0203 Z100b: calcdpb 32,16,156,256,2,512,0,@ 0121+2000 0123+040F00 0126+9B00FF00 012A+F000 012C+40000200 0130+0203 Z100c: calcdpb 32,16,156,128,2,512,0 0132+2000 0134+040F01 0137+9B007F00 013B+C000 013D+20000200 0141+0203 Z100d: calcdpb 32,16,316,256,2,512,0 0143+2000 0145+040F00 0148+3B01FF00 014C+F000 014E+40000200 0152+0203 epson: calcdpb 80,16,190,128,2,512,0 0154+5000 0156+040F01 0159+BD007F00 015D+C000 015F+20000200 0163+0203 gnat: calcdpb 80,16,169,128,1,512,0,@ 0165+5000 0167+040F00 016A+A8007F00 016E+C000 0170+20000100 0174+0203 kaypro0: calcdpb 40,8,195,64,1,512,64 0176+2800 0178+030700 017B+C2003F00 017F+F000 0181+10000100 0185+0203 kaypro1: calcdpb 40,16,197,64,1,512,64 0187+2800 0189+040F01 018C+C4003F00 0190+C000 0192+10000100 0196+0203 ;drop support for expanded-directory format - risky anyway. ;kaypro2: calcdpb 40,16,197,128,1,512,0 kaypro3: calcdpb 68,16,1351,1024,2,512,0 0198+4400 019A+040F00 019D+4605FF03 01A1+FFFF 01A3+00010200 01A7+0203 ; ; NOTE: skew tables are for physical sector numbers. ; 01A9 end OT-FOUND 0BAE 7C MOV A,H ; ACTUAL TRACK FROM READ-ADDRESS 0BAF 21570C LXI H,SEKERR ;POINT TO ERROR COUNTERS JRNZ RESTR0 0BB2+200F DB 20H,RESTR0-$-1 0BB4 B9 CMP C ; (C) MUST STILL BE VALID DEST. TRACK 0BB5 C8 RZ ;NO ERRORS 0BB6 35 RTS00: DCR M ; SHOULD WE KEEP TRYING ? 0BB7 37 STC 0BB8 C8 RZ ;NO, WE'VE TRYED TOO MUCH 0BB9 D311 OUT fdctrk ; re-define head position accordingly JR RETRS ; RETRY SEEK 0BBB+189D DB 18H,RETRS-$-1 TRK0ERR: 0BBD AF XRA A 0BBE 21570C LXI H,SEKERR JR RTS00 0BC1+18F3 DB 18H,RTS00-$-1 0BC3 23 RESTR0: INX H ; RESTORE ERROR COUNT 0BC4 35 DCR M 0BC5 37 STC 0BC6 C8 RZ ; If count 0, return with Carry set. 0BC7 7E MOV A,M 0BC8 FE09 CPI 9 JRNC RESTR1 ; RESTORE ONLY FIRST TIME 0BCA+3005 D#f  d   ###v$L '4   ##F 5N #nQ+n#K l l l#nc lW l   ##~ ~(!J _ ^#V"     : ¡     V#^} :8 ^ #:u *a _ ~2o W * OͿ"b 2d >J>>J+~$>*b  :d _ "i ! "k !e  !e :o  "p 2r 2s :r ž"p d~#$ʂʂ z>2r Þ:s Gʞx2s +~#"p z\[p :r :u < =ʹ#î% *b  ^#VN#fi    P      {{    The MODE utility is called in one of the following ways: MODE Outputs HELP information MODE d: Displays the present drive status to the user MODE d:arg1,arg2,arg3 Updates the present status and displays it. Valid arguments are: DS or SS = double or single sided QT, DT, ST = quad (192 tpi), double (96 tpi), single (48 tpi), or QTD, QTS, DTS = half track modes e.g. DTS is 48 tpi media in a 96 tpi drive. DD or SD = double or single density S6, S30, etc. = step rate in milliseconds MMS, Z37, Z37X etc. (media formats); the X implies extended format. $Drive A: has a fixed configuration which cannot be determined by MODE. $5.25 inch floppy $8 inch floppy $ Controller - $ Sides - 1 $ Sides - 2 $Recording Density - Single $Recording Density - Double $ Tracks per Inch - 48 $ Tracks per Inch - 96 $ Tracks per Inch - 192 $ Tracks per Inch - 48 tpi media in 96 tpi drive (R/O) Tracks per Inch - 48 tpi media in 192 tpi drive (R/O) Tracks per Inch - 96 tpi media in 192 tpi drive (R/O) $ Format Type - $ Step Rate - $00 milliseconds $ Drive - A: ( ) $PRESENT Configuration is: $NEW Configuration is: $Invalid command line or command line arguments. $The requested format is invalid for the specified drive. The complete configuration must be supplied $A: does not exist. $The driver module for A: is incompatible with MODE. $ inoperative. $Drive is specified but not linked - ERROR IN SYSTEM- $ 6122030 3 61015   > wM  2*7w#6?#7 .,:;[]=<>| !?]45#Ra{i_p# l s s l ls:¬MAQGQx3ڰbڼqҼo5p5"""*!yb! ~G*!N Kկ2}!,"** NK6  :+O K2$^#V#N#FxNp:$p:Gjxj Y# A>QFQ KK{<<ʽ! ~6 69BK! OS $ N wy! "(9"f1f! Ҕ2! ~#foCOPYRIGHT (C) 1982, DIGITAL RESEARCH 151282 . "  *SmwrX8# ;@E\aÜPÒ/×ï ) L× _o @ > *}D 0000000000000000001R M sC1C!4!~#|~(5 #~#fo~ +6#### @>y$A{CM^#V#zy8#0#!nodev nodev nodev nodev nodev nodev nodev nodev > Y !! ^#VA** $J>| **9(>M*** $> | (*** $> ( | G({.x:A( s.1._> #Wo> g2AG?S [ú x2( :((?:A2( KAYPRO CP/M 3.101b (c) 1985 DRI and DRM $ No CCP$ CCP COM A2üBKAYPRO Winchester Disk Interface 3.100e$ D e  D e  :?>(>25:Q *s   Q G! XRyW~KAYPRO Floppy Disk Controller 3.100e$ PX PX PX ::G:O 毰>2 :Q !f ~62*s {Yvvvv v8>:2f > Q {ɀ/"O"L"O"R"`'"|KAYPRO CRT driver v3.100g$ z++î+++r+KAYPRO Keyboard handler v3.100e$ 4     ,l,a,É,},+KAYPRO Z80-SIO handler v3.100e$ 4 (4(4 ]ð,,ñ,,ô,7,YKAYPRO Parallel Printer v3.100c$  23! YN#F#~_#~pW~# ~(<#~#恻 6~p 0#^#V#N#F##  O>w#O>pw!r #######~ !r =KAYPRO UNUSED MMS Z37 Z37X Z100 EPSON ASSOC FMT8 FMT9 FMT10 FMT11 FMT12 FMT13 FMT14  ,  Q,  1,  q-  -  (-  9-  J-  [-  l-  }-  -  -  -  -  - - - . . @ U'. W8.  I.  XZ. sk.|.  1! |G^ >">"! }">">"!E" > $> >$>O#>#>J!! }#>! }! }!^#V#z ~##ں O +~#! Gy ҳ s#r#<GyOx !  N#fiOf ” ï f M  * "*} "* "* "* "!x  :| O:2B ͏ | >2z͏ < 2 ͏ @,͏ z͏ |2y2 f Ç |  f *u |Ç :yG 8!  )>2 2 ! " *"  !  @ ) !  @ ) !  @ )!~((#### y p#q#s#ro ͏ v ʍ  !  A$w#Y$  : ! ܐ : 2: 2: 2>2 : ͨ G: x(dNG2 ! m : ͨ O : ͨ =(G o> g"::2 :2 :2 *m>2  x 7R0x >2 7ZxNd8dͶ 2 xͶ 2 ! {Oz 8 YW#x 8xͶ 2 2 {Ͷ 2 : ͨ W: ͨ B(0 O= 0 : ͨ 88O: ͨ G ??OU D (0y xy(DGy<2 > >$ !  A~$# w++~'w0#~'w+ GOxGd0d 0 !!!! !  y2j !_ ~(k2k OC͗8a2l "m  ^#V#N#F:l o& "o @ AO :l O "q 8)2>͓ : 8:j O ! [q s#r! :j O ! ^#VSq *o  ~ #>(#~(>MOG#n( !C[q ! N#F ! F ?2^#V+ɷ*o ~v7*q q#p N#fi * B" * s#r#6 "  CC Cs :A2i`z n& +c 2*"* "*o ~ ###v(~!O N#fi{*m :?O!~O/ͩq!> !;!:wK:D=2>22ɯ m MODE v3.106 $Requires CP/M 3.1 or MP/M $GETDP.REL not linked into system ${   { 4s 1     }0X|* •#^#V"e [_Rd»   *:} ~̓ͧ~͑! ~#"v O 6 *v  +"v ~#a{? 7>2} *v AQ2 2 2 2 AG:x2~  `+} yʴ¬#ʌ |~ʛ,ʛ ¬: y02 W rDSQGTxG~S(D(x 2 W>SGTDSx2 Wx2 W~0:0G~S,S S0:0OxGx2 z,k W+jz k+j2} >: ʟ0! <=()t u: ʵ/ݶw: /ݶw: ( (': ( (: I~!c  * 8#,xݶw}!n >Kr [t #=^[r ~#n *e Ϳ:x  ʤ G!00 }0°> o"  :}       *r ~##~         ###f  d   ###v$L '4   ##F 5N #nQ+n#K l l l#nc# l] l   ##~ ~(!S _ ^#V"     : ¡     V#^} :8 ^ #:~ *a _ ~2x W * OͿ"k 2m >J>>J+~$>*k  :m _ "r ! "t !n  !n :x  "y 2{ 2| :{ ž"y d~#$ʂʂ z>2{ Þ:| Gʞx2| +~#"y z\[y :{ :~ < =ʹ#î% *k  ^#VN#fi    Y   '   {    The MODE utility is called in one of the following ways: MODE Outputs HELP information MODE d: Displays the present drive status to the user MODE d:arg1,arg2,arg3 Updates the present status and displays it. Valid arguments are: DS or SS = double or single sided QT, DT, ST = quad (192 tpi), double (96 tpi), single (48 tpi), or QTD, QTS, DTS = half track modes e.g. DTS is 48 tpi media in a 96 tpi drive. DD or SD = double or single density S6, S30, etc. = step rate in milliseconds MMS, Z37, Z37X etc. (media formats); the X implies extended format. $Drive A: has a fixed configuration which cannot be determined by MODE. $5.25 inch floppy $8 inch floppy $ Controller - $ Sides - 1 $ Sides - 2 $Recording Density - Single $Recording Density - Double $ Tracks per Inch - 48 $ Tracks per Inch - 96 $ Tracks per Inch - 192 $ Tracks per Inch - 48 tpi media in 96 tpi drive (R/O) $ Tracks per Inch - 48 tpi media in 192 tpi drive (R/O) $ Tracks per Inch - 96 tpi media in 192 tpi drive (R/O) $ $ Format Type - $ Step Rate - $00 milliseconds $ Drive - A: ( ) $PRESENT Configuration is: $NEW Configuration is: $Invalid command line or command line arguments. $The requested format is invalid for the specified drive. The complete configuration must be supplied $A: does not exist. $The driver module for A: is incompatible with MODE. $ inoperative. $Drive is specified but not linked - ERROR IN SYSTEM- $ 6122030 3 61015   021000F8FF7E23FE32C07E23FE2EC07E23FE30FA :10022000C07E23FE31C911FF02060F1ABEC0231380 :1002300010F9AFC9219AFE224A033E553246030601 :10024000033AF7FFFEFF2156033AF4FF280F060199 :10025000E60C21530320062150033AF6FF0F0FE668 :1002600003EE03324E0378324F03224C0 ͟bC { 7ɯO&  { % 7ɷO*q >_#> W2*N#~/ I(A `2!6#6 :Oy:O!O F#N#fi !:W/G:lO*#~!Ć2c[sR:c :ӷ : <> (B!5B~ ҉:ӷ‰́ÉЀ  { 2"222s1q+Oxp>2͙8ˀH ˩>2*o##"'8:<:ӷ > 2!'*n(#n(82c@ *# B !  % $ ) 3 - 1 Q 5 ` 9 o = A     !_~2#  2>:P 2@!:@U! "":ӆ͡GӄӅ<ӂ>Ӄ> ӇͱG.ۀ x !ۀ *"*" :>:@U> *o ~<<_ !~#fo"*o #F:ӆ͡>Ӂ*:@3 }(  }8o<:@U [} xʻ }ӄ|Ӆ:Ӄ>ӂ> 2?i(H:?Ӈͱ(>ۇG 8_(4>02?i(%:?Ӈ &ۇ_ } ͱ(ۇG ɯ<& } ˏ& `ۇ( } =2>ہ( w͡ ͡(>Ӈͱ(ۇG կ2>:ӆz%ۄ ۅ1( >Ӆ>1ӄ>pӇ>ӆ& ۇw}& ۇ/}     ^   :R 2:Q ((1  m!ˮˎˆ#ˮ !# *o ##""2"~ą ~ :":"! ""*~"s 222!">2 ">2"U ~º>2"2!"~wU( ~wú*~ #<(:!"ʿ~wú*~ FN6 6 ~ .` !V( *~~  pqÿ~_(  O(G(*o vº*q q pn f *~  *~~G ?ڴ q#p>2"a! "6 5 8Ͷ!8H!!!!!:c 0 *"F#N(((: ˀ˩yq+Oxp>2Ͷ!8h(˩H(ˀˀH ˩>2"*o ##""D 8:<: " > 2! D*"n(#n( 82c @ *"#~! 2c [s R:c : " :" <> (_!"5_~ Ҧ: "¦͞! !æ    { 2"222"s1:"O!O F#N#fi ! :W/G:l O*"# ͼ bC { 7ɯO&  { % 7ɷO*q  >_#> W2"*"N#~/ I(A `2%"5 !"6#6 ":Oyʶ!:%"gx0XDol(ˠ! @t(! 5! .! %- o!g}:c 0|!" 57!"#57~ 0͞!>2"Ͷ!!:%"OH!q!q!X1>  .H! - !> >:"082c >:O滱  CRT  !Y+ w#*A "Z+*D "]+*F "_+>:Y+œ$y" %y[]+i$u$:[+@2q+*]+:[+_W2[+Rͻ":Z+8_#<2Z+*]+P zW"]+K_+B0  V$:Z+ȷ=2Z+*]+P R:[+ :Z+(=2Z+>P=2[+[]+>O2[+*]+O :[+O"[]+<2[+W%!\+y0(=(=(=(=(=(%=(0=(4~w~w~w~w`> y:\+2\+>@2q+*Z+"b+:\+ 2\+!\+y0(=(=(=(=(=(=(!=(0~w~w~w~w ~w*b+| 2d+} 2f+$:\+2\+! M:f+ G( P _:d+ PO2[+{2Z+ [_+"V$ >yxO$A Q A YD$zWD$:\+͐$D$͐$c$!|g!Y+6  yR&Eh'AG2a+6 :a+Bb#Cʼ#y2f+6 y2d+:a+=$*l( s(6 y2g+6y2e+:a+L*D *(> ʻ" "(ʫ*ʰ**# L# #K+d">2Y+:\+ (6*_+P |gT] |gͻ%!P **_+P |g"_+ V$*_+P |g"_+ V$*_+|g!P *x%x|y}>%xzy{>#zW|g &x|y}>&xzy{> x%&xF&x|y}>a&xzy{>#zW|g&x|y}>&xzy{>++ xE&&ͻ":Z+'[]+!P * 0DO |gDMR|g[_B 30H,RESTR1-$-1 0BCC CDDC0B CALL STEPIN ; OTHERWISE STEP HEAD IN 1 TRACK JR RETRS 0BCF+1889 DB 18H,RETRS-$-1 RESTR1: ; RESTORE HEAD TO TRACK 0 0BD1 3E03 MVI A,00000011B 0BD3 32550C STA STEPRA ; RETRY WITH MAXIMUM STEP RATE 0BD6 CDF40B CALL HOME 0BD9 C35A0B jmp RETRS ; RETRY SEEK 0BDC 3A630C STEPIN: lda htflag 0BDF 4F mov c,a 0BE0 B7 ora a ; CHECK HALF TRACK modes 0BE1 0648 MVI B,01001000B ; STEP IN WITHOUT UPDATE 0BE3 C4250C CNZ TYPE$I ; STEP A SECOND TIME (W/O UPDATE) FOR HALF-TRK bit 6,c ; QT 0BE6+CB71 DB 0CBH,6*8+C+40H 0BE8 C4250C CNZ TYPE$I ; STEP A THIRD TIME (W/O UPDATE) FOR QUARTER-TRK bit 6,c ; QT 0BEB+CB71 DB 0CBH,6*8+C+40H 0BED C4250C CNZ TYPE$I ; STEP A FOURTH TIME (W/O UPDATE) FOR QUARTER-TRK 0BF0 0658 MVI B,01011000B ; STEP IN AND UPDATE TRACK REGISTER JR TYPE$I 0BF2+1831 DB 18H,TYPE$I-$-1 HOME: ;POSITION HEAD AT TRACK ZERO... 0BF4 3ED0 mvi a,11010000b ;force TYPE$I status 0BF6 D310 out fdccomd 0BF8 DB10 in fdcstat 0BFA E604 ANI 00000100B ;TEST TRACK ZERO SENSOR, JRNZ @TRK0 ;SKIP ROUTINE IF WE'RE ALREADY AT TRACK 0. 0BFC+201E DB 20H,@TRK0-$-1 0BFE DB11 IN fdctrk ;DOES THE SYSTEM THINK WE'RE AT TRACK 0 ?? 0C00 B7 ORA A JRNZ HOME1 ;IF IT DOESN'T, ITS PROBEBLY ALRIGHT TO GIVE "RESTORE" 0C01+200E DB 20H,HOME1-$-1 0C03 2E06 MVI L,6 ;(6 TRKS) ;ELSE WE COULD BE IN "NEGATIVE TRACKS" SO... 0C05 0648 MVI B,01001000B ;WE MUST STEP-IN A FEW TRACKS, LOOKING FOR THE 0C07 CD250C HOME0: CALL TYPE$I ;TRACK ZERO SIGNAL. 0C0A E608 ANI 00000100B SHL 1 ;"SHL 1" BECAUSE TYPE$I DOES AN "RLC" JRNZ @TRK0 0C0C+200E DB 20H,@TRK0-$-1 0C0E 2D DCR L JRNZ HOME0 0C0F+20F6 DB 20H,HOME0-$-1 0C11 0608 HOME1: MVI B,00001000B ;RESTORE COMMAND, WITH HEADLOAD 0C13 CD250C CALL TYPE$I 0C16 EE08 XRI 00000100B SHL 1 ;TEST TRACK-0 SIGNAL 0C18 1F RAR 0C19 1F RAR 0C1A 1F RAR 0C1B 1F RAR ;[CY] = 1 IF NOT AT TRACK 0 0C1C 3E00 @TRK0: MVI A,0 0C1E D311 OUT fdctrk ;MAKE SURE EVERYONE KNOWS WERE AT TRACK 0 0C20 C9 RET ; READ$ADDR: 0C21 3EC4 mvi a,11000100B ; READ-ADDRESS COMMAND WITH SETTLE DELAY jr PUT$I 0C23+1804 DB 18H,PUT$I-$-1 TYPE$I: 0C25 3A550C LDA STEPRA ; STEP-RATE BITS 0C28 B0 ORA B ; MERGE COMMAND PUT$I: 0C29 D310 OUT fdccomd ; SEND command TO CONTROLLER 0C2B DB10 WB: IN fdcstat ; WAIT FOR BUSY SIGNAL 0C2D 1F RAR ; TO COME UP JRNC WB 0C2E+30FB DB 30H,WB-$-1 0C30 DB10 WNB: IN fdcstat ; poll controller for function-complete 0C32 1F RAR ; Busy? JRC WNB ; wait until not busy. 0C33+38FB DB 38H,WNB-$-1 0C35 17 RAL 0C36 320000 STA @dstat ;SAVE TYPE II (III) STATUS FOR ERROR DETECTION. 0C39 3ED0 MVI A,11010000B ;TERMINATE COMMAND (RESET STATUS TO TYPE 1) 0C3B D310 OUT fdccomd 0C3D DB13 IN fdcdata ; 0C3F DB10 in fdcstat ; 0C41 07 rlc 0C42 C9 ret setside: 0C43 3A0000 lda @side 0C46 EE01 xri 00000001b ; active low output 0C48 0707 rlc ! rlc 0C4A 4F mov c,a 0C4B F3 di 0C4C DB14 in sysctl 0C4E E6BB ani 10111011b ; clear old side bit 0C50 B1 ora c ; add new side bit 0C51 D314 out sysctl 0C53 FB ei 0C54 C9 ret 0C55 00 STEPRA DB 0 ; STEP RATE CODE 0C56 00 RETRYS DB 0 0C57 0000 SEKERR DB 0,0 ; SEEK,RESTORE ERROR COUNTS 0C59 0000 CMODE DW 0 ; POINTER TO MODE BYTE 0C5B 02 LOGDSK DB 2 ; CURRENT DRIVE SELECTED BY THIS MODULE 0C5C 00 BLCODE DB 0 0C5D 00 SELERR: DB 0 0C5E 00 SELOP: DB false 0C5F 00 MODFLG: DB 0 0C60 FFFF00 TRKS: DB 255,255,0 0C63 00 htflag: db 0 0C64 00 mtflg: db 0 0C65 END  ; System Control Block definitions public @civec,@covec,@aivec,@aovec,@lovec public @mxtpa,@ermde,@date,@hour,@min,@sec FB9C = scb equ 0fb9ch FBBE = @civec equ scb+22h FBC0 = @covec equ scb+24h FBC2 = @aivec equ scb+26h FBC4 = @aovec equ scb+28h FBC6 = @lovec equ scb+2ah FBE7 = @ermde equ scb+4bh FBF4 = @date equ scb+58h FBF6 = @hour equ scb+5ah FBF7 = @min equ scb+5bh FBF8 = @sec equ scb+5ch FBFE = @mxtpa equ scb+62h 0000 end FB9C SCB FBC2 @AIVEC FBC4 @AOVEC FBBE @CIVEC FBC0 @COVEC FBF4 @DATE FBE7 @ERMDE FBF6 @HOUR FBC6 @LOVEC FBF7 @MIN FBFE @MXTPA FBF8 @SEC Рd4dT8 =Y@AIVECSՑPddT85aQA@ERMDEPU`TU(5%:@SEC M@ #y %Y9ՑP_y%Y9SՑPy1=Y9VcyI59PUcu!=UJ9RSqMp +R0#! R|`G}iO@&^%*]+P "PYDM|W]*_+ |gGMR0! R DM*]+ͻ%*_+0|W]!P *:Z+ (*_+P R|g V$*]+K_+B0! B|gK]+ |GM! |GM*_+0|g!P |gͻ%*]+P B|g:[+O !P B**]+:[+_ R|W]*]+ͻ%!P B**_+P B|g"_+"(*ҫ*D*_+/P |W] |g! = DM@&*]+T]:[+O>PO |gͻ%:[+o& *ë*> 2h+>2h+:d+ _:f+ WzdG::{_>8(2j+{_*_+BKP  Y|W]Sk+[)( >2i+:j+)[k+͞)2a+(:h+:a+[k+͐):i+/7:h+:a+͐):i+/$[k+͞) #:h+( :j+/G:i+:i+G:j+[k+e):h+( :j+G:i+:j+/G:i+zWq)zWq)̓) >yx|)A Q A Yͨ)q)ͨ)_)!"|g{ _z W0D 2h+>2h+ [f+ʹ)Sf+2o+[d+ʹ)Sd+2p+W:o+_):f+W:g+>8>2m+:d+_:e+>8>2n+:o+O:p+DM! 8(.):e+:n+_ 0:m+W):g+:m+W 0:n+_):g+:m+W:n+_*M:\+  :Z+0DGP ! * )!P []+:[+OGBK+:\+2\+[]+! (! +xzWy{>+> $+xzy{><++| ɯ2[+2Z+*_+" KEYBD !~~0_W~@G+~悳_##N >yAyQ+ʮ+ְ!wgNO ~ɯ+(y>DCE DTE MODEM xO_ P!+! ,+~~0_W~@G+~悳_##N >yAyQNˑV~ 0=yl,(Nx,N yxy͉,(Ny,N++ >yx+8 xɯLPT  >,(y@@$ R _   $  _   $ U   $      [ ?       (          @  (  @    ?       (          ; @  (   @        @        ; @  P    P    (  ?   (  ?   D  F       $I$I$I$H@ HUUUUR$ D @ @ URI I! $@!I BH D    %P  !$  @$ A U BI* BI*  $     @  "DHI$I$HHHD@@H$$  A @  "I$  H $@@  "A "I " $  @ @B@ BA"!  $    I$  D@ ! H      T *  $A$HH  $@@       @@   U U@  I$  @D $$!$H        H!I$ B@   @ HB HI $$    H    $@  @  @ A"$ @H D H@HH "D" A B@  H  @ B ! HB !B@ @ @         A" I  D!      B@  B @   $D!B  ! @ @ H  $DD" $ HB  $B   @ @H   !  @  ",!."* K6 *}ʴ}<ʴ.}o|g "($ Kt> =2(*f*(}DɯQ"(>QKQKQ>Q"%Q9b ڗ>2#×:#<ֵ2#* ! ""++"29 Cw*{}<^#Vz!c! >c! Jw*q~69!͐=‡*":*}®: =::<>2*i^#V+ d! K*}@*)): K:) O "!w [O?WGzO:VxGyOGxw q*}}ʴ>2d:#Ϸ>29෯2~2#!   )xð*}*}"*x"xm*^#V* s#r**s#r* :﴾Y4Y̓**~#ng* s#r ^#V랚a##)0"xx! """XC*~<ζ*":! ::9 *"x"*"g* 3:= :Oi :=H:Gi a6:G/O* *W :T=ҍ aʚ~µ6 *:X)!:T>qkֵ!:6>X*{Q:_2{2Ē"͂"X~<µ #cdfg !"()  *N!r)! N! )z<*)"!":X*:w :w#:w*2*}D ̓¡>2ͱԬ߫?~¾¾ʳƳ>w͙=2͜:wÚ~̓ʑpá!6 N w ͧBpͧȸÚgsr͐-͜ě ͤ S)_ ͤ̓~?w͐s-?F͜pN͆p# Þ͐*6!¿?~p*6 >2ͱ ݬ Ԭ߫ ͷw*oq ͋"@6ȸ͚Xͤ͋͗wO~<: g~w#w#6 ##)͋@ *  g~?G++! o#~>T}! 6 **# K"G*~ xr͐-xą@ ˩7(͚Sʀw: :<RHͥ:>~c!o#~E^#V)G#~#~!~ b k##N#F#^#V#~#fo~o2{2g*wޟ ʪҢÞ+}*#}o|g:O*s#r#w!~w/~@w//Hͥ* >=)_g:0"ök*w)*c)-}ͤÀk*s":;:r2͚Μù͚Μ©͚}/_|/* W}_*c" }o|g"c>2{COMMANDS CONVENTIONS  3CNTRLCHARS  COPYSYS & VCPNET ( eEXTENSIONS , @NDOS3 3 5CPNETSTS 6 DATE = YEXAMPLES ? (DEVICE A /OPTIONS F yEXAMPLES L DIR V IBUILT-IN Y KEXAMPLES ] WITHOPTIONS e OPTIONS h sEXAMPLES y _DRIVES DSKRESET DUMP UED COMMANDS {EXAMPLES /ERASE 1OPTION 4EXAMPLES 0FILESPEC MGENCOM )OPTIONS \EXAMPLES @GET UOPTIONS 9EXAMPLES [HELP .HEXCOM INITDIR bLIB nOPTIONS MODIFIERS nEXAMPLES {LINK ROPTIONS 3EXAMPLES ZLOCAL "YLOGIN %ALOGOFF +7MAC .7EXAMPLES 3 OPTIONS 3HMODE > NETSTAT F0NETWORK I%NTPDATE NvPATCH QPIP (COPY) TEXAMPLES ZtOPTIONS agPUT jeOPTIONS q EXAMPLES ykRENAME wEXAMPLES VRMAC 4OPTIONS EXAMPLE RSXRM 9SAVE EXAMPLE CSET -LABEL EXAMPLES PASSWORDS MODES HATTRIBUTES KEXAMPLES CDEFAULT ~TIME-STAMPS *OPTIONS REXAMPLES DRIVES YSETDEF rEXAMPLES SHOW |EXAMPLES SID 'COMMANDS EXAMPLES  UTILITIES SUBMIT YSUBFILE DEXECUTE /PROFILE.SUB /TPA NTR oTYPE !WEXAMPLES %tUSER 'vEXAMPLES *XREF +B$ $ $ ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all ch T Copyright (C) 1982, Digital Research  BNKBIOS3 SPR F700 0900 BNKBIOS3 SPR BA00 2600 RESBDOS3 SPR F100 0600 BNKBDOS3 SPR 8C00 2E00 60K TPA $$$$$ W8  I  XZ sk|  (  9  J  [  l  }        @ U' Z37X Z100 EPSON ASSOC FMT8 FMT9 FMT10 FMT11 FMT12 FMT13 FMT14    Q  1  q   _#~pW~# ~(<#~#恻 6~p 0#^#V#N#F##  O>w#O>pw!r #######~ !r =KAYPRO UNUSED MMS Z37 handler v3.100e$ 4 (4(4 ]ðñô7YKAYPRO Parallel Printer v3.100c$  23! YN#F#~zîܙrܻKAYPRO Keyboard handler v3.100e$ 4     laÉ}KAYPRO Z80-SIO2*s{Yvvvv v8>:2f > Q{ɀ/OLOR`'|KAYPRO CRT driver v3.100g$ PX PX PX ::G:O 毰>2 :Q!f ~6  D e  :?>(>25:Q*s  Q G! XRyW~KAYPRO Floppy Disk Controller 3.100e$  COM A2üBżKAYPRO Winchester Disk Interface 3.100e$ D e?S[ú x2( :((?:A2( KAYPRO CP/M 3.101b (c) 1985 DRI and DRM $ No CCP$ CCP  $> | (*** $> ( | G({.x:A( s.1._> #Wo> g2AG> Y !! ^#VA** $J>| **9(>M*** @>y$A{CM^#V#zy8#0#!nodev nodev nodev nodev nodev nodev nodev nodev  M sC1C!4!~#|~(5 #~#fo~ +6#### > *}D 0000000000000000001R *SmwrX8#;@E\aÜPÒ/×ï) L× _o @ à  1 O  j$   | Ãà à à BB     +"}{_}o>2~77ø~7"9:OG#Q{ozg# "" !2*%DM**ѵ+))  H~#+}#<:<ʲ<77:<ʢ =2(*f*(}DɯQ"(>QKQKQ>Q"%Q!*$ K*"x!*! @$@hK\K:K ~#~ w* NK* NK^#V#N#F!x>QGQx3ڰbڼqҼo5p5"""*!yb! ~G*!N Kկ2}!,"** NK6  :+O K2$^#V#N#FxNp:$p:Gjxj Y# A>QFQ KK{<<ʽ! ~6 69BK! OS $ N wy! "(9"f1f! Ҕ2! ~#foCOPYRIGHT (C) 1982, DIGITAL RESEARCH 151282 aracters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned   :T_>2T! % **<:7 "E:7%E÷ LH# SR5 UJ BP PL= MTI MBO HMU FM[ CWa PCr POi PA CP PN OP HE FO !<>wͱ n!<>(PP ÓóçáíÿKayPro Custom KP (08@HP       = =7 =6  "!͓O~!~6* "!" * "! " } ** *  *  M|N+"M N:LHͅÅD Å >* *͓ b" . *"] !/~##ʁtZ *F#n!Is!^#V&&##&))::^#V#*^#V>+)x-8_ B  NN  Please don't use * or ? in a file name. Sorry. That output file type is not allowed.ASM@LIB@COB@FOR@BAS@PRN@PLI@C @ASC SUB@COM$$$BAK O HMU FM[ CWa PC: |}!͉.wͱ n!<>( 88002687!<>(-<  WORK ---------------  Complim || Small Business Applications, Inc  3220 ana Suite 209  ouston, 7006 (713)528-51 -------- ---------------- ;;; ;;;;;;;  B  NN   ! **************************************** ns, Inc  3220 a 8800 Mount disks and press return. -------- - -------------- ;;; ;;;;;;;  B $$$BAK SAVE H(6#P#l#'%&b%%$%&%!E"N""'!,{+/""&"}!'%#y! RE WDE4FQ MTFBPSLbIyKsC X *"R :. d:!v  d O! ~ :] w:Y)4~@:$ :v$ O~4 ͜ A ; *& --"A  ͻ O !  w# x2   > $  Ox1  2 V !S4 ^#V#N ~#ʎ 4 \ > i 5 i 6 ~v  ʋ +4~ڋ 6 ###͙ #~w>>4ѧ>V>< ͙ >> ~  W # xj4 $ 4 o+ ! > ~3 @Y >:Y #~ Y #6 ~ >.Y ~ Y #L ͜ :z@t M4 Ya  ͳ*z 2* !| ʮ G2!xʩ ###ß #^#VT0 ͻ  ;   ͜ ͻ ɋa{ a *"'*"%!"):G< B :P< / C/ :W("'< ! ").")*)*%r1:?ʲ :@;ʲ r1² *DM*%z<„ *n.ڄ 1ò ~ !" x h.ڹ x<  *%ß  w# Ÿ w#x<ʙ Ù 6"::1ͳ1ò !@ 5:?ʲ !N ʲ ##*  !ͯ 7² 2! "V!_*>: $##͉.^#V ͉.!$͉.^#V! ͉. 2!~B.~R«26 !5 2² *"% !" *)"*+":-2@+^8\ !T!͉.!._*")*"+:2- +2%:ȯ2f ͳ2;ò *%DM*I.DM!" *""͓.6"zp͝p^!\ !͉.:* ͉.͟*! ͉.*%~ ʯʯ#à*'h.һ*DM*%~#"%  :> y>  > '"!6 W~zw2`i"@>2 »! ":,/2=!~R> p5H!~p~6 n+> #wR*:B.w#6!4~ڕ͟ژ!6 !57 >!\ !͉./ȯ217 >*"%*"'!2͉.:32!N H?##~B 8 ʲ #8~=² ʲ #* H.Y ͻ 7:H:0:t2S:`!?!3T!͉..~:'H~'!6ò  # :7:Ҋ{2!" 4 *& - !N## ~ P2-!,6#6 #6 !k6 T2-!,6#6#6:+2k# A1BC:5Ͳ ~YN >2,/2-~Y#N ):+G>2-x2k~Y@NB>2.4:?ʲ !C6=OWk6 !3͛Gw :ڗʑ5͛Gڏ“x#t#6.}H6:?ʲ !5##~@G:6ڲ x2!6?T]# ͉.6  >H2!<6ʲ H! :!B.:w$ !:G~3+4: ==0iH!#>wͫM2!<ic !"6 :@OAԵͻ ͻ 6\+o+6:?ʲ !N## ʲ *  >H<7ʲ 7 !$ 87 NY¡%:2² :?ʲ Kʕ !" :D("!*%h.> *'h.>k7ò 2#C1DiM2² 1͉*%DM*'+I.=U7ڲ :#]*% "%*' "'*%#*!͓.*%DM*'I.+-2  NYi*'*%i*T]ʞw#ž+":?3ʲ =-:z@p3² *"%*"'h.!N# #~ B!3² :#Y*%**'h.+P.yO"%@*'*%h.!~#G:%n:!Oĸͨ: <=d*}‹!:$ҋ{! "$:"N3 YN— ~#  ¨>  ¸ :2%2TU:T}$%> ***$$,:og"$;&! "'!"'2A -:G:!j: 2"YʰNʰ.|}*#$2"_:!{22!ң2{! Ұ>2 *' ^#V:"*' ~+"'66Q9 N-Yc 8 ͻ ͻ *'^#V #~2!#^#V"##^#V"%:!28 D*#}k-͵|k8 *%:!`N͵ ͵d~k8 !00_ z,rgM͵L͵8c8 A 9 A 9 c!/9YN"@9YN# ::z7 @2z:X7² :z2z:O !* !v%͉.! "v{ͯ 2z> 2T> 2u!z6 7ò 2!T]6 # ͉.! """2>yhyh~.yŽ:G:ڎ! ͗Ž!͗7 =~ ʹ*?:.# —x> #ɯ=F#~+: ##x@2~.# # ~# ) *~+# "' >"%y02 87  **%h.*!DM*I.#DM"ͨ.#"wu#i"i5:?ʲ !N ʙ##~@v ʏ#!~i5 ~@̏~ !" ("!*DMA8*%n.Ҳ I."#=y~@# ͏: ===G c : ==G9*'|: W8\+ AY*%"!*'"#:k*#|k~8\+2A k!N#**!i* !͆͏%͉.!w#w2! """!ͯ !w6 7ò :2!@  2"%y2' *%w#"%*'+"'|J͵ ʏ O:OO26:?ʲ !N ##ͮc o9 49!ͅ9!2:(.x!+͉.!9ͅ9!ͅ9!zͅͻ 9 *-9 * -: ͻ : *DM*I.-!: *I.-+: I.-6: ͻ A: !,~<‘#~#‘P:<ʈH: ͻ U: ͻ o: :.': :,']: :-'ͻ : *& -ͻ ::C<: 3 <O:xy ͵o& -ͻ :û :< : * |  :G!@ :jOV  :\+!$ 4 o+x3!~ڲ O##~ N² #~ D² yʿ#~=² ʲ #* :32H3<² !\ 3͉.\ H!\ <̞ H!͉.3! ͳ.9>2(!;~<!" *"%*"'>21Ͷ:@*f ÿ:(D a :4ڲ Ҳ O!G4^.² :A  >H2%3%a a  >H.!<ͳ.3%<!.ͳ.3! ͉.!+͉.!.͒ 3!+͒ ! ͉. ͉.9c !" *"*h. ""!"R"  **h. `i"*"P/* "(*h.!!"ͯ))!:]2w>2]'+ͫ !!2]2v D!(&*X^!^! ^!: 2 !D l! #c!!ByB.^#V:G:R/%#> ’!!R/52v(&%#:=%#͔#)*" *T/""*P/">2]:C 2v(&> 2v(&>2v:  2 (&2 :  2 : ":G:R/ҁ":S/ x"͖((6 !R/4Á":26#(*6 *P/***" ~2*:¬" !q#͉.Ͷ'>w2S/'q1\+!NA#͸ >2 ͫ':  #*~* :w*͵* #:c )#'! :<+'q1\+2 :=2#P#:2!:N#r#!:M/w2M/4͔#:="&* +2~*+͔#(:S/#:R/*!:ʥ%4͵*+͛##:S/#<: #:]G:G#:P#:E#*P/*> 2S/6 :R/<2R/*g:k ͮ͜ ͫ*" }!"*T/=b$*P/:R/"P/*͵**P/h.+$:R/1$+'T/:_z W!4:*P$w+$~͔#S#=$͔#:=Gr#:S/$͔#"c )*"!"ͯ))͔#"c )*:_M%+~#M%J*9%"!:w#6ͯ))͛#c :=G*~ʘ%*.͵*+*G/Ϳ.**I/.m%*T/")͔#:S/²%:R/*.͵*+*T/"*I/Ϳ.**K/.A͸ ͛#c :=G*J*x&* /"T/"~*%!ͮ)͔#:c %͖(:  Y&( )!R/4:Y&Fw*P/B.~6 *+"w(~h&:R/<2R/ q&2S/:vw }&2S/ƒ&> ͜ :  Ķ'͕&6#:.*N/~!Ԥ&:G ~!ڷ& +ê&x2R/> 2S/#*y6."~6 # &*`$"ͫl '":R/G|2M/:2:wG:]͖((6 *͵*ͫ'!6 (~ r2!'~j' j'rG'#3'#~rG':!'j'~j' j'rj'#V':G:2}!T/B.*((((*K/.* "OG*(y|}!4ͫ*A͸ 7͖((:=[(~ ʌ(*6 : 6 (#6 :R/<2R/:k *`ͮ> ͜ ͮ2S/:*P/=B.*P/*:  (y(*h.~p#G )!Y)6 *}!"ͫ*T/[):=G:D)*[)}|"!06 !X)6 }|*:0G͆)!4#6:X)̫=[)!~ʥ)#:\ʥ):]¥)2Y)2X):X)̸ :&=2&*:=)*þ)"P/DM*I.DM*ͨ.#"͵*:&<2&"*P/**DM*I.DM*P/͓.+""P/:_  ~Gȧ# !4*Q"*:.yȹ6.J*  +~#++~ e*X*#*{_z Wy*f*y6.*P/J*y"P/B.**I."z*:R/g"Ͷ'"ͫ**"*P/͉.*x2S/y2R/:<6 #=*++"N/*P/*"P/*P/**y6."͉.*P/:=T/_z W}|:*P/B.*P.|:I+:\+! "4!P+ͤ!ͳ:  :͜ 2 },w,! "8"6#"4!:< O},:V~+# +x28},6 #":y, ,#:V~ ,+x29y, ,A."4* "*4"2*4|G,+"4,*" G,*6#"6%,*6|ʵ,* "c )*2h.K;\+-R; q1À,`;\+* "͔#":8! "6,ʩ,:Y)ʯ,c )͵,;\+!<:8O G:,O:=G͸ :G:R/,:26#*~, :9,**B.*h.h--͵*:91-:< 1-#͵*+*R-h.R-.*1-DMI.:R/<2*T/":8GH<^.ž-:9G:8ʏ--Ԫ-:9O*:͉.~#l-+T]B.*I.#DMͨ.#"#*:.DMI.#DM"͓.++".2.....:.0͜ *. '."..:.2.>0͜ ɧ/22/> !2/~6 /3/Y ; =O͞.:2/>22/> !2/~6 /3/Y ; Commands are Read, Write, Include, Filelist, Kill, Display, Change input, eXtract (X to backup, X=filename to extract), Block, Print, Spool, Mode, Tab, Linesize, END, and QUIT. Type the capital letter only, followed by any additional data required, or by '?' for more information. Specify R (Read some text) or Rn (Read n lines). Too little workspace. Specify number of lines. More text on file -- use R to Read as needed. Specify W (Write all) or WC (to Cursor) or Wn (n lines). Type R at the end to Read after Writing. Specify Ln to set screen width to n columns. Specify BM for Block Move, BC to Copy, BD to Delete, or BK to Kill Block Markers. characters to be deleted. Confirm (Y/N)? Specify P (Print all) or PB (Print Block). P! or PB! starts a new page, P= displays options. Printer in use. Continue New Page (Y/N)? END or END=filename must be typed exactly to end the edit. That file exists. Kill it or choose another name. Type QUIT to cancel the edit, QUITX to save the workfiles. ENDQUITXFlush background print (Y)? Non-text characters found in :: Type Return to continue, Escape to stop. Maximum width is Tn sets tabs every n columns: Tn,...,n,0 sets tabs at specific columns. (Use TW instead of T to tab by word). Mode Option must be T,P,AY,AN,BY,BN,CY, or CN. Ifilename opens an Include file: I@ resets the current one. Use I or I@section-name to start including text. Enter Cfilename to change to a new Input file. must be mounted on drive File is marked Read-Only. Check disk. Type F (or Fdrive-letter) to list all files on the disk. Dfilename displays a file screen by screen. Press Return to Continue Invalid drive Disk is Empty List of files on disk Specify Kfilename to delete a file. Please confirm that file is to be deleted (Y or N): Not enough workspace. Cursor is inside block. Nothing to print. Type S to start, SX to stop, Sfilename to set up. File not found. Invalid file name. **Need 2 Block Markers. Found .** Specify X to Backup, X(or XB)=filename to Extract. Not enough workspace. Press Return to Continue, Y to Accept Escape to Stop, Return or Section Name to Continue - Not Found. Quick-Print Options Y-N ) is --> Page Size ( Bottom Margin ( Line Spacing ( Left Margin ( Single Sheet ( Start New Page ( Print Options Okay (Y/N)? Edit System Status Updating Reading Writing Including Printing Finished Inactive Active Workspace contains Lines/Paragraphs Words Characters: -Total -In Use -Remaining Mode: Program Text Special C/R Display: Auto Return: Blank Packing: Line Width: Tab Columns: 1 Tab By Word: 1 Yes No Display of ** Workspace nearly full! ** Workspace full! Use the W command to write some text to disk before continuing. Found occurrences. Search/replace request ignored. Cannot find exists. Write over it (Y/N)? Nothing to input. Disk is full! Sorry. Too many files on disk already. * is a new file (Y/N)? Loading input file * . "z %"#"*P."* |…<:j2:ʡ 2N?2k?2?2?2?2?2>2o9:<2)@! """?*& )!T/!K/.! to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DRIVES Syntax: DRIVES Explanation: The DRIVES Command displays the logical-physical drive table in the BIOS. Example: A>DRIVES DRIVES v3.103 A: = (50) KAYPRO Winchester Disk Interface 3.100d B: = (51) KAYPRO Winchester Disk Interface 3.100d C: = (33) KAYPRO Floppy Disk Controller 3.100d ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. OtI/.!G/.: 2C2! ͉.:k2+:T2 2] !J=>21i=!͉.m !m=\ i=m=2(!3͉.! ͹=!4͹=:2<Ž=:322͍>>X>=!| :< !$ ͻ f  ~?= #û=+   !ͯ 2> !(4:1>!$  < N Y=:(><!+͉.<!+ͳ.>j>S>:<$P>!3$ ; N Y8>v>2S:H:_3H<|>3%3*<;  +$™><!~ʴ>^.ʴ>####Ü>###F~>!.>>6 !,>@>w/2-!-> 6 > 2kS  !!?͉.!@͉.#͉.c N? > (!B͉.> =?:G? o+ ͻ  The Magic Wand (tm) Text Editor - Release 1.11 Copyright 1979, 1981 by Peachtree Software Incorporated Atlanta, Georgia Version: **************** Serial Number: 0000 0000 wMQs#r(@Ü@:3o& |ʜ@cN! 9^ }2KTNï>! 9~@*M5K! "M*2O! @#*2sPA)2^#V##^ public @lptbl cseg @lptbl: db 50, 51, 33,255 db 255,255,255,255 db 255,255,255,255 db 255,255,255,255 end :1001000031DF03CD0F02CA34022122F8CD2602CA04 :1001100070022119F9CD2602CA800221E5FDCD2603 :1001200002CAA102110E030E09CD0500C300001181 :1001300026030E09CD05000E0DCD05000E0F11D1C1 :1001400002CD0500FEFF115903CA0702118000CD40 :10015000F401CDFA0121800011F502010600EDB095 :10016000CDFA010E09118000CD05003AF602571EA6 :100170000021DF031922FB02EBCDDC013AF802B7C4 :10018000CA9101571E002AFB021922FD02EBCDDCA9 :1001900001F32A4A03114000011000EDB03A460372 :1001A00012133A4E0312133A4F03123AF602470E55 :1001B000002AFB022B3AF502571E001BEDB83AF855 :1001C00002B7CAD501470E002AFD022B3AF70257A3 :1001D0001E001BEDB8CDBB022AF902E97C1767EBC4 :1001E0000180FF09EBD5E5CDF401CDFA01E1D12580 :1001F000C2DF01C90E1ACD0500C90E1411D102CDFE :100200000500B7117D03C80E09CD0500C30000210C :10021000F8FF7E23FE32C07E23FE2EC07E23FE30FA :10022000C07E23FE31C911FF02060F1ABEC0231380 :1002300010F9AFC9219AFE224A033E553246030601 :10024000033AF7FFFEFF2156033AF4FF280F060199 :10025000E60C21530320062150033AF6FF0F0FE668 :1002600003EE03324E0378324F03224C03C32F01B7 :100270002100F8224A033A81F8324E033E32182E0A :10028000215CFD224A033E333246033E01324E03D7 :10029000324F033A01F7B721530320CE2150031800 :1002A000C92174FD224A033E01324E033E323246DA :1002B000033E03324F0321560318AF2AF90211649B :1002C00000195E23562A4C037CB5C8010300EDB02B :1002D000C90043504D3320202020535953000000C3 :1002E000000000000000000000000000000000000E :1002F000000000000000000000000000000000DB23 :1003000014CBBFD314EDB0DB14CBFFD314C9075506 :100310006E6B6E6F776E20524F4D207665727369EB :100320006F6E210D0A244C4443504D332076657284 :100330007320332E31303065202D20476F742052CA :100340004F4D206964202E0D0A240000000000009B :100350003233212132332122230D0A6572726F72EA :100360003A2046696C65206E6F7420666F756E6406 :100370003A2043504D332E5359530D0A240D0A652C :1003800072726F723A2052656164206661696C75A1 :0F03900072653A2043504D332E5359530D0A24B2 :0000000000 LDAX D 0225 BE CMP M 0226 C0 RNZ 0227 23 INX H 0228 13 INX D DJNZ CHK0 0229+10F9 DB 10H,CHK0-$-1 022B AF XRA A 022C C9 RET CPM3$SYS: 022D 0043504D33 DB 0,'CPM3 SYS',0,0,0,0 023D 0000000000 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 024D 00000000 DB 0,0,0,0 0251 0D0A657272NOFILE: DB CR,LF,'error: File not found: CPM3.SYS',CR,LF,'$' 0275 0D0A657272RDERR: DB CR,LF,'error: Read failure: CPM3.SYS',CR,LF,'$' 0297 00 TOPRES: DB 0 0298 00 RESLEN: DB 0 0299 00 TOPBNK: DB 0 029A 00 BNKLEN: DB 0 029B 0000 CSTART: DW 0 029D 0000 RESEND: DW 0 029F 0000 BNKEND: DW 0 SIGNATURE: 02A1 DB14 IN 014H RES 7,A 02A3+CBBF DB 0CBH,7*8+A+80H 02A5 D314 OUT 014H LDIR 02A7+EDB0 DB 0EDH,0B0H 02A9 DB14 IN 014H SETB 7,A 02AB+CBFF DB 0CBH,7*8+A+0C0H 02AD D314 OUT 014H 02AF C9 RET 000F = SIGLEN EQU $-SIGNATURE 02B0 0D0A07556EBADROM: DB CR,LF,7,'Unknown ROM version!',CR,LF,'$' 02CA 0D0A476F74ROMMSG: DB CR,LF,'Got ROM id ' 02D7 2E0D0A24 ROMID DB '.',CR,LF,'$' 02DB 0000 ROMCRT DW 0 02DD BUFFER: DS 0 02DD END  ; 0F701H: DRIVE A TYPE... ; 0F702H: CUR SPT? 0293 3A01F7 LDA 0F701H 0296 B7 ORA A 0297 215303 LXI H,LPDWIN1 ; FLOPPY, WIN [,WIN] JRNZ ROMZZ$1 029A+20CE DB 20H,ROMZZ$1-$-1 029C 215003 LXI H,LPDWIN0 ; WIN, [WIN,] FLOPPY JR ROMZZ$1 029F+18C9 DB 18H,ROMZZ$1-$-1 ROMXX: ; 81-292A, NO VISIBLE VERSION - FLOPPY-ONLY 02A1 2174FD LXI H,0FD74H 02A4 224A03 SHLD ROMCRT ; ALL FLOPPIES ARE ST... 02A7 3E01 MVI A,1 02A9 324E03 STA FPYTYP 02AC 3E32 MVI A,'2' ROMXX$0: 02AE 324603 STA ROMID 02B1 3E03 MVI A,3 02B3 324F03 STA FPYSEL 02B6 215603 LXI H,LPDFPY ; FLOPPY ONLY JR ROMZZ$1 02B9+18AF DB 18H,ROMZZ$1-$-1 SETLPD: ; LOCATE LPTBL... UPDATE IT 02BB 2AF902 LHLD CSTART ; ASSUME THIS IS BIOS BASE 02BE 116400 LXI D,100 ; OFFSET TO LOGICAL-PHYSICAL DRIVE TABLE 02C1 19 DAD D 02C2 5E MOV E,M 02C3 23 INX H 02C4 56 MOV D,M 02C5 2A4C03 LHLD LPTBL 02C8 7C MOV A,H 02C9 B5 ORA L 02CA C8 RZ 02CB 010300 LXI B,3 ; TODO: ALLOW MORE DRIVES? LDIR 02CE+EDB0 DB 0EDH,0B0H 02D0 C9 RET CPM3$SYS: 02D1 0043504D33 DB 0,'CPM3 SYS',0,0,0,0 02E1 0000000000 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 02F1 00000000 DB 0,0,0,0 02F5 00 TOPRES: DB 0 02F6 00 RESLEN: DB 0 02F7 00 TOPBNK: DB 0 02F8 00 BNKLEN: DB 0 02F9 0000 CSTART: DW 0 02FB 0000 RESEND: DW 0 02FD 0000 BNKEND: DW 0 ; THIS CODE IS LOCATED IN HIGH RAM FOR CERTAIN ROM VERSIONS SIGNATURE: 02FF DB14 IN 014H RES 7,A 0301+CBBF DB 0CBH,7*8+A+80H 0303 D314 OUT 014H LDIR 0305+EDB0 DB 0EDH,0B0H 0307 DB14 IN 014H SETB 7,A 0309+CBFF DB 0CBH,7*8+A+0C0H 030B D314 OUT 014H 030D C9 RET 000F = SIGLEN EQU $-SIGNATURE 030E 07556E6B6EBADROM: DB 7,'Unknown ROM version!',CR,LF,'$' 0326 4C4443504DROMMSG: DB 'LDCPM3 vers 3.10' 0336 3065 DW VERS 0338 202D20476F DB ' - Got ROM id ' 0346 2E0D0A24 ROMID: DB '.',CR,LF,'$' 034A 0000 ROMCRT: DW 0 034C 0000 LPTBL: DW 0 034E 00 FPYTYP: DB 0 ; 1=ST, 2=QT, ELSE ERROR (NO FLOPPY?) 034F 00 FPYSEL: DB 0 ; AVAILABLE FLOPPY SELECT BITS, 01 OR 03... 0350 323321 LPDWIN0: DB 50,51,33 0353 213233 LPDWIN1: DB 33,50,51 0356 212223 LPDFPY: DB 33,34,35 0359 0D0A657272NOFILE: DB CR,LF,'error: File not found: CPM3.SYS',CR,LF,'$' 037D 0D0A657272RDERR: DB CR,LF,'error: Read failure: CPM3.SYS',CR,LF,'$' 039F DS 64 03DF STACK: DS 0 03DF BUFFER: DS 0 03DF END 030E BADROM 0000 BC 0005 BDOS 02FD BNKEND 02F8 BNKLEN 03DF BUFFER 022B CHK0 0226 CHKSIG 020F CHKUNI 0000 CPM 02D1 CPM3SYS 000D CR 02F9 CSTART 0002 DE 01F4 DMASET 0207 ERRMSG 034F FPYSEL 034E FPYTYP 012F GOTROM 0004 HL 0004 IX 0004 IY 000A LF 0100 LOADER 01DC LOADF 0356 LPDFPY 0350 LPDWIN0 0353 LPDWIN1 034C LPTBL 0009 MSGOUT 0191 NOBNK 01D5 NOBNK0 0359 NOFILE 000F OPENF 037D RDERR 0014 READ 01DF READ0 01FA READFILE 02FB RESEND 000D RESET 02F6 RESLEN 0270 ROM17 0280 ROM19 0234 ROM20 034A ROMCRT 0346 ROMID 0326 ROMMSG 02A1 ROMXX 02AE ROMXX0 026A ROMZZ1 025D ROMZZFF 001A SDMA 02BB SETLPD 000F SIGLEN 02FF SIGNATURE 03DF STACK 0080 TBUFF 02F7 TOPBNK 02F5 TOPRES 6530 VERS 00000b,10000000B,00000000B,01010111B ; 5" GNAT,dd,ds,st dw gnat,0 DB 00000000b,00000001B,00000000B,00011000B ; 5" KAYPRO dd,ss,st dw kaypro0,0 DB 00000000b,00000001B,00000000B,01011000B ; 5" KAYPRO dd,ds,st dw kaypro1,0 DB 00000000b,00000001bherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page relocatable file for execution under MP/M in relocatable segment OR Output .RSP resident system process file for execution under MP/M OS Output .SPR system page relocatable file for execution under MP/M Phhhh Program origin; changes default program origin address to hhhh. Default is 0100H. Q Lists symbols with leading question mark S Search preceding file as a library $Cd Destination of console messages d can be X (console), Y (printer), or Z (zero output). Default is X. $Id Source of intermediate files; d is disk drive A-P. Default is current drive. $Ld Source of library files; d is disk drive A-P. Default is current drive. $Od Destination of of object file; d can be Z or disk drive A-P. Default is to same drive as first file in the LINK-80 command. $Sd Destination of symbol file; d can be Y or Z or disk drive A-P. Default is to same drive as first file in LINK-80 command. ///2Examples A>LINK b:MYFILE[NR] LINK-80 on drive A uses as input MYFILE.REL on drive B and produces the executable machine code file MYFILE.COM on drive B. The [NR] option specifies no symbol table file. A>LINK m1,m2,m3 LINK-80 combines the separately compiled files m1, m2, and m3, resolves their external references, and produces the executable machine code file m1.COM. A>LINK m=m1,m2,m3 LINK-80 combines the separately compiled files m1, m2, and m3 and produces the executable machine code file m.COM. A>LINK MYFILE,FILE5[s] The [s] option tells LINK-80 to search FILE5 as a library. LINK-80 combines MYFILE.REL with the referenced subroutines contained in FILE5.REL on the default drive A and produces MYFILE.COM on drive A. ///1LOCAL Syntax: LOCAL local-dev Explanation: The LOCAL command enables a requester to reassign selected I/O back to local from the network. The LOCAL command updates the requester configuration table. local-dev is the specification of a local device such as LST:, A:,... CON:. Example: A>LOCAL P: ///1LOGIN Syntax: LOGIN {password}{[mstrID]} Explanation: The LOGIN command allows a requester to log in to a specified server. A requester must log in before any resources on the server can be accessed. Once a requester has logged in, it is not necessary to log in again even though the requester might power down and then power up again. A requester can only be logged off a server by an explicit LOGOFF command issued from the requester. password is an optional 8 ASCII-character password; the default password is PASSWORD. [mstrID] is an optional two-digit server processor ID; the default is [00]. Not all servers require login. Example: A>LOGIN mypasswd[02] ///1LOGOFF Syntax: LOGOFF {[mstrID]} Explanation: The LOGOFF command allows a requester to log off from a specified server. Once a requester has logged off, the server cannot be accessed again until you issue a LOGIN command. [mstrID] is an optional two-digit server processor ID; the default is [00]. Example: A>LOGOFF [02] ///1mac Syntax: MAC filename {$options} Explanation: MAC, the CP/M 3 macro assembler, reads assembly language statements from a file of type .ASM, assembles the statements, and produces three output files with the input filename and filetypes of .HEX, .PRN, and .SYM. Filename.HEX contains INTEL hexadecimal format object code. Filename.PRN contains an annotated source listing that you can print or examine at the console. Filename.SYM contains a sorted list of symbols defined in the program. ///2Examples A>MAC SAMPLE A>MAC SAMPLE $PB AA HB SX ///2options Use options to direct the input and output of MAC. Use a letter with the option to indicate the source and destination drives, and console, printer, or zero output. Valid drive names are A thru O. X, P and Z specify console, printer, and zero output, respectively. Assembly Options That Direct Input/Output A source drive for .ASM file (A-O) H destination drive for .HEX file (A-O, Z) L source drive for macrolibrary .LIB files called by the MACLIB statement. P destination drive for .PRN file (A-O, X, P, Z) S destination drive for .SYM file Assembly Options That Modify Contents Of Output File +L lists input lines read from macrollibrary .LIB files -L suppresses listing (default) +M lists all macro lines as they are processed during assembly -M suppresses all macro lines as they are read during assembly *M lists only hex generated by macro expansions +Q lists all LOCAL symbols in the symbol list -Q suppresses all LOCAL symbols in the symbol list (default) +S appends symbol file to print file -S suppresses creation of symbol file +1 produces a pass 1 listing for macro debugging in .PRN file -1 suppress listing on pass 1 (default) ///1MODE Syntax: MODE {d:{args}} Explanation: The MODE Command allows showing/configuring of the BIOS operating parameters on a disk drive. args is a comma-separate list of arguments. Valid arguments are: DS or SS = double or single sided DT, ST or HT = double (96 tpi), single (48 tpi), or half track half track is 48 tpi media in a 96 tpi drive. DD or SD = double or single density S6, S30, etc. = step rate in milliseconds MMS, Z37, Z37X etc. (media formats); the X implies extended format. If no drive (or arguments) is specified, a brief help is shown. Example: A>MODE C: MODE v3.104 PRESENT Configuration is: Drive - C: (33) 5.25 inch floppy Controller - KAYPRO Floppy Disk Controller 3.100d Recording Density - Double Sides - 2 Tracks per Inch - 48 Step Rate - 6 milliseconds Format Type - KAYPRO ///1NETSTAT Syntax: NETSTAT Explanation: The NETSTAT command is a terse version of CPNETSTS. It only shows networked devices. Example: A>NETSTAT CP/NET Status ==14!"&p!&ʀ!&ʡ  &     Y !     :W !":ʑW *"*J@  :F:N:O:G *+:W :G *+:W ͻ*|g %  }  !~#2~#.~#0~#1#!"J>U2F:!V:( !S !P:2Nx2O"L/! "J:2N>2.!\"J>32F>2N2O:!S !P!t"J>2N>22F>2O!V*d ^#V*L| CPM3 SYS ˿Unknown ROM version! $LDCPM3 vers 3.100e - Got ROM id . $ 23!!23!"# error: File not found: CPM3.SYS $ error: Read failure: CPM3.SYS $ 021000F8FF7E23FE32C07E23FE2EC07E23FE30FA :10022000C07E23FE31C911FF02060F1ABEC0231380 :1002300010F9AFC9219AFE224A033E553246030601 :10024000033AF7FFFEFF2156033AF4FF280F060199 :10025000E60C21530320062150033AF6FF0F0FE668 :1002600003EE03324E0378324F03224C0  $  N wy! "(9"f1f! Ҕ2!  ~#foCOPYRIGHT (C) 1982, DIGITAL RESEARCH 151282  KK{< <ʽ < K  : >! ~6 69BK! OS }!,"** NK6  :+O K2$^#V#N#FxNp:$p:Gjxj Y# A>QFQx>QGQx3ڰbڼqҼo5p5"" "*!yb! ~G*!N Kկ2 !*$ K*" x!*! @$@hK\K: K ~#~ w* NK* NK^#V#N#F!",!."* K6 *}ʴ}<ʴ.}o|g "($ Kt> =2(*f*(}DɯQ"(>QKQKQ>Q"%Q!2 *%DM* *ѵ+))  H~#+}#<: <ʲ<77: <ʢ2 ~77ø~7" 9:OG#Q{ozg#  "" BB     Ãà à Ãà  1 j$   | @ "H$ UUT$$ $I D$BA@! B$$A IA $!"   @$@$BI!! @ ""$D A   $I$ @ !  . "y2; ! "(:2(=2(:=; ! ~; 4#. {2(! " "9"2!;(y3] K! o \b!,_ ^#V* !J ^#V̀:#!"( COPYRIGHT (C) 1982, DIGITAL RESEARCH 151282/(  + 1 7 = }!!!!"""""# ####$$$$#$-$A$J$S$@Y$u u J$u u }$$$$$*%P%$%&'('d'''(('({ A g X J v !)$*^#V#^#Vw# l l l ls:¬MA wM  2*7w#6?#7 .,:;[]=<>| !?]45#Ra{i_p# l s s͂:(A2= / ::0! dگ61#d ڸïp#:w#6 !6 :6 *#!)6.#)͂ O(BDOS Function = File = !,$-"h ! 9"f! ͉:2(t™:! =Hgo :O*; * Ó*"r*r"ÿ<:g:!͐*f}D! ~6 t!r ͷO(^  : šn!6@G:x: P:<: P n6  t6 ! ^6 t6 u:)<͠^! G:Ҏ>xʝʝw>ɯw̩z:»!>wɯ:=zxzz: :G:=/ͽx:Āy!4 5~y 5 6 y(^@O:=7:y :I :=e:  zz#͂:!  r  ! O(Ì*( ~2* *}ʷ!#¶! ""÷:_:*( #wxH! )6 "& :!  x2 GH)+6 :2, :!-  :, !+*(  ~L#Bxz:* : *( ~ʓOڊ{2Ó#w:2. +:. 2- !% "( 2* ! "& !* ~4:2- Ԃ: G ͳͨ^2+ >2:2 *N#G2  :+ ̜2 5*( ~o#"( M š*( ~`Uoj*( ~#"( Ñ!* ~6 s!+ 6 :+ ‚xoͳ*& ~2+ o#"& !+ 6M : W:2 x ͺ*( +"( w  : >2* 2 :*( : +w"( ͺ:G:  !% "( ^-:* $P:<\: W:2 xM s:<9>2 :* 9x~+q ’x2 :* ͂^2 ¢ů͠: !ڽ*( ~5WèjM 2 ͨx*( +w"( j>2+ 2* jx. #NzW:  : !2 W! 5= ^x^ z: m :* ;#wO: 9ʌ ^:— ~x  ) :* :   >*( +"( w++2+ 2+ p! " r y< < <% zr ͷr 6r 9r MDÌ:o !6!h : ʚnt2 r 6 2 >r z<*)$"!z<~r s^#V#N#FxN:oʲ ̀õ (# Þ CP/M Error On : Disk I/O Invalid Drive Read/Only File Read/Only Disk Password Error File Exists ? in Filename ò ò >2(a." :(2:<:5(5(;(:(2ɯ2(2{_zW{_zW ) 74#4#4)7( #  w#*J|^#V#"i(##"k(##"m(###"o(#"q(##"(!s( )*s(!()*(|!(6~6 7*k(w#w*m(w#w#w>2('å2(*OͶyڲ ò <* .Ͳ:0!(:(:(ò 2*(>*ͫ"( !(s#r#p*k(N#F*m(^#V#F*(:(O}|y9*( +"*( }|yP#9*( *(DM"(*k(s#r*m(s#r#pyoxg͝DM*(0MD"(!*MD$:(Oë!(N:( «G>O:( ù*  :(n` ~#foͤ2(O "(}:(O*( "(2("(:(O:(G2(!(w* ~zWw+ !z?#~*! * * G! O~2(~m͗O~t>2(?:(2(O:(w:Ғ4~:(w?r##rp# ä |g}oì*g(  #G ¾1*q(:(*w***> r ) .:(O! *c(:(Oͫ}@2æ  ~á *g(:(o$* ~K6 ?~wKw**i({#zir+s{ozg*(*(|g͸*u(*(   R>22Z$w*q(>ww:(c( *(#*i(s#r*:(!(:G~#<*q(#~!;(!(!(!~6 k! "2(*q(N1q*{(]*{([*y(}<^#V(t6 ^#V}e ^#V#~2(>â9͆>! "(*y(³*(X)*ÿ͂"*g(* K! ~<:wb##>w#w> r !~#!8>8> t>nͦv8 ~*o(wn:(r :(/GyOOA +¬ ¢y2(:(x¹o& :(W>OͫE:(ڟ?N/*"(y2ͦ+>2( ̀2(k,º ʺ*(*iҺ@:O ~2(~WW:2(Ôyʛ?ʔx ʔ |̷ÔN͆G:(<2(x# W:(<­:2(2 G?>Gr x~:(2(Ô##~*$*">2>2: *(~w *" 2(>ʄ@~k:((s~*9~Ês~ ~ͅ<Eʀ@~›:(6!¦w͚ ̋,ÇPY*({zBKNyʺ Nú # #>? ;*~ w-xąH"(0 *(#ĊH( ,ˆʀHÈ2(xą  ):(@O~#w͚ʀô̓-b_++V@* )͗Os++r ! x>w~6 :(6~#+w#w+ ~;wɯ2 K,OFq-yl?Np g&:(ʓ~†wŒ~è# # x ͗w w@ ~wb͐Ú!"*>o+"v- *!b("": r#~?w#>r# L=J! Lv  w,b ?~O ͆=: <>w##~2( 4~?̓-¹:(<üAX2(r K:(w++~=wv 4͗O5:(2(X:(!(v q: v v Mڂ?Ͷ >T͓Â! "(>(Â:(G:(O:(h=2(7ryy/W!(:(lڈ>F6:(_/G:(ʧ:(ڨ|OͤG:(_O zW{|:(*(}|BKN zyG:( 2(9:(>#:(>#*+S!X:(ڜq: ʺ!((ʵ>2(  ͤ2( O DM͸}>r "("(2(:(2(* :(:(FsO s#r:(„y==„*(!(^W*y(^#Vx+7=2(wͼկw#KWK*("(J T͞*(:( ["(Ͷ:(WMںʛ>(úͶ >TJ:(!(ʷ ͞x!(w4 PWP  Â*!! ~~#~O~#G~.|°! w:ck[! x?[! ~ʤ͆[͗PPv qO-á=.: <ʰ! Vq##~_@w: <œ. ʩ.ʩA r r##s <}r  cN ! ~态O> G~G! ~G~o> _yW#x#W{s+p+q7r#r#r>@  > 2  !! q#p#w2(wW* ._3ҫ -!(s:(!(xQ*q(~wɯ2(2(ù* ~2(~w#~2(~wZ! ""2(=2*~2(=2(2(k:*wX/ 6 X*̀ !~$6 :03i"!~6 * .>=)Q!(QX<k*{(}<^#V{! ~! _*o(~s̓  2@ !()#w*~"!!(Fw̓ :(w̚":>#2(̓ *~wć"#Fx T]## #~ ȷ   *4 # '  4 !(  *~^ ^ 33G# P v :dv 6  y #*~w> 2 *p@! ~*"v@*w# ) 6 # ͙   ! N)@ u :G*g(` ~!x_<_@!*o(y<:(/G?~##~? 6!K@?F6 ##N6  2 p##q:r !Z$2! "ög:(2T͐-:ʹ!>2<2(!!(w: >2(*6 !O~2(+A@2! ͚A=: <%~?¯"k "?~?ʾ"ZT͐"*>o"͒"!:O"(Ý"}-6͚=========== Requester ID = 02H Network Status Byte = 10H Device status: Drive P: = Drive F: on Network Server ID = 00H ///1NETWORK Syntax: NETWORK local-dev=server-dev{[srvrID]} Explanation: The NETWORK command enables a requester to assign selected I/O to the network. The NETWORK command updates the requester Configuration table. local-dev is the specification of a local device such as A:, B: ... P:, CON: or LST:. server-dev is the specification of a server device such as A:, B: ... P: in the case of a disk device, or 0, 1 ... 15 in the case of CON: or LST:. A missing server-dev defaults to 0 in the case of CON: or LST:. [srvrID] is an optional two-digit hexadecimal server processor ID. The default is [00]. Example: A>NETWORK P:=F: ///1NTPDATE Syntax: NTPDATE {server} Explanation: The NTPDATE Command sets the local time to that of the specified server. Default server is 00. Server ID is specified in hexadecimal. Example: A>NTPDATE 2 Time was set to: 04/16/16 18:34:12 ///1PATCH Syntax: PATCH filename{.typ} {n} Explanation: The PATCH command displays or installs patch number n to the CP/M 3 system or command files. The patch number n must be between 1 and 32 inclusive. Example: A>PATCH SHOW 2 Patches the SHOW.COM system file with patch number 2. ///1PIP (copy) Syntax: DESTINATION SOURCE PIP d:{Gn} | filespec{[Gn]} = filespec{[o]},... | d:{[o]} Explanation: The file copy program PIP copies files, combines files, and transfers files between disks, printers, consoles, or other devices attached to your computer. The first filespec is the destination. The second filespec is the source. Use two or more source filespecs separated by commas to combine two or more files into one file. [o] is any combination of the available options. The [Gn] option in the destination filespec tells PIP to copy your file to that user number. PIP with no command tail displays an * prompt and awaits your series of commands, entered and processed one line at a time. The source or destination can be any CP/M 3 logical device. ///2Examples COPY A FILE FROM ONE DISK TO ANOTHER A>PIP b:=a:draft.txt A>PIP b:draft.txt = a: B3>PIP myfile.dat=A:[G9] A9>PIP B:[G3]=myfile.dat COPY A FILE AND RENAME IT A5>PIP newdraft.txt=oldraft.txt C8>PIP b:newdraft.txt=a:oldraft.txt COPY MULTIPLE FILES A>PIP b:=draft.* A>PIP b:=*.* B>PIP b:=c:.*.* C>PIP b:=*.txt[g5] C>PIP a:=*.com[wr] B>PIP a:[g3]=c:*.* COMBINE MULTIPLE FILES A>PIP b:new.dat=file1.dat,file2.dat COPY, RENAME AND PLACE IN USER 1 A>pip newdraft.txt[g1]=oldraft.txt COPY, RENAME AND GET F—>2—͇ͱ* «>2͙wBp+ү:w͚AP{ 2W>O2ø}R* ):r͚Μc2ZT͐-ڣ3͗@YsY̓Y׬Yͅ:߫Asү:@ү@ү$͚̓A؜=:<~?¯k î?~?ʾZT͐ڮ*>o"͒"!Þ:Oݠ"Ý}6͚ ~2Asv@NN~v$̓W+vw̚v$̓rrͅ:r߫>2+A@2r!Z2! "ög:2T͐-:ʹ>2<2ڣ!w: >2*6 ݠݣO~<w:*)@ u:G*g` ~!x_<_@*oy<:/G?~##~? 6K@?F6 ##N6 ⬯2p##q:#*~w> 2*p@! ~*"v@*w# ) 6 #̬͙  N#FxT]## #~ ȷ  *4# ' 4!  *~^ ^33G# Pv:dv6  y2@ !״)#w*~"ҫ!Fw䫨ҫ̓ҫ:w̚":>寯2̓*~wć"̀ !~$6 :03i"!~6 * >=)Q!QX@ ˩ > 2 ˩!! q#p#w2wW* _3ҫ-!s:!xQ*:<œ. ʩ.ʩAܙrr##sܙ<}r cN ! ~态O> G~G! ~G~o> _yG~.|°! w:ck[! x?[! ~ʤ͆[͗PPvqO-á=.:<ʰ! Vq##~_@wڴͶ:WMںʛ>úͶ >TJ:!ʷ ͞x!Ǩw4 ϨPWިPܙÂՙÂ*!! ~~#~O~#FsO s#r:(„y==„*!^W*y^#Vx7=2wͼկw#KWK*"J T͞*: ["+SX:ڜq:ʺ!ʵ>2 ܙͤ2 ѧO ̛DM͸}ާ>r""2:2* ::: 29:>:>*ڈ>F6:_/G:ʧ:ڨ|OͤG:_O ̛̛zW{¦|:*}|BKN¦ zyG:!vq:vՙvMڂ?Ͷ >T͓Â! ">Â:G:O:h=27ryy/W!:l=:<>w##~2 4~?ɥ̓¹:<ɥɥüޣAX2rK:w++~=wv4͗O5:2X!"*>o+"v *!b"ݠ": r#~?w#>r# L=J Lv  wȸbܙ?~O ͆ڥ†wŒ~è# # x ͗w ٤ڤ٤ڤw@ ~wb͐Úݞ! x>w~6 :6~#+w#w+ ~;wɯ2KOFq-yl?Np g:ʓ~( ȸˆʀHÈ2xą  ):@ΣO~#w͚ʀô̓b_++V@* )͗Os++r ~Gw# * #~$%+@*9>  #>? ;*~ w-xąH"0 *ĊHEʀ@~›:6¦w͚ ̋ȸÇPY*{zBKNyʺ Nú2: *~w *" ݠ2>ʄ@~k:(s~*9~Ês~Ԭ~ͅ<G:<ޡ2x# W:<­:22G?>Grx~:2Ô##~*$*">2̀2kº ʺ**iҺ@:O ~2~WW:2Ôyʛ?ʔx ʔ |̷ǡÔN:r:/GyOOA +¬ ¢y2:x¹o& :W>OͫE:ڟ?N/*"y2ͦ>2 ݠRXޟDM*w6 # x *ow**ws#r̀*i6#6 *}"j@*|<ď>!8>8> t>nͦv8 ~*own    $I$I$I$H@ HUUUUR$ D @ @ URI I! $@!I BH D          ; @  P    P    (  ?   (  ?   D  F    ?       (          ; @  (   @        @  $      [ ?       (          @  (  @   (NyN++ >yx+8 xɯLPT  >(y@@$ R _   $  _   $ U  EM xO_ P!! +~~0_W~@G+~悳_##N >yAyQNˑV~ 0=yl(NxN yxy~0_W~@G+~悳_##N >yAyQʮְ!wgNO ~ɯ(y>DCE DTE MOD xzWy{>> $xzy{><ܯ+| ɯ2[2Z*_ KEYBD !~:gܺ:m܂W 0:n܃_:gܺ:m܂W:n܃_M:\  :Zܑ0DGP !  )!P []:[OGBK:\2\[]! (!> 2h>2h [fʹSf2o[dʹSd2pW:o_:fW:gܺ>8>2m:d_:eܻ>8>2n:oO:pܹDM! 8(.:eܻ:n܃_ 0:m܂W|A Q A Yͨqͨ_!|g{ _z W0Dyx WzdG::{_>8(2j{_*_BKP  Y|W]Sk[ڷ >2i:jܷ[k͞2a(:hܷ:a[k͐:i/7:B*_P B|g"_(*ҫD*_/P |W] |g! = DM@*]T]:[O>PO |gͻ:[o& ë> 2h>2h:d _:f V*]K_ܷB0! B|gK] |GM! |GM*_0|g!P |gͻ*]P B|g:[O !P B*]:[_ R|W]*]ͻ!P R0#! R|`G}iO@^*]P PYDM|W]*_ |gGMR0! R DM*]ͻ*_0|W]!P :Z *_P R|g#zW|gx|y}>xzy{>++ xEͻ:Zܷ[]!P  0DO |gDMR|g[_ x|y}>xzy{> xxFx|y}>axzy{>_P |g"_ V*_P |g"_ V*_|g!P xx|y}>xzy{>#zW|ge:aLD (> ʻ (ʫʰ L Kd>2Y:\ (6*_P |gT] |gͻ!P *͐c!|g!Y6  yREhAG2a6 :aBbCʼy2f6 y2d:a=*l s6 y2g6y2} 2f:\2\! M:f G( P _:d PO2[{2Z [_V >yxOA Q A YDzWD:\͐D~w~w~w~w`> y:\2\>@2q*Z"b:\ 2\!\y0(=(=(=(=(=(=(!=(0~w~w~w~w ~w*b| 2dV:Zȷ=2Z*]P R:[ܷ :Zܷ(=2Z>P=2[[]>O2[*]O :[O[]<2[W!\y0(=(=(=(=(=(%=(0=(4:\(:q@(y2q:qܷy(/[]i:qO:\ܱx>@2q*]:[_W2[Rͻ:Z8_<2Z*]P zW"]K_B0  :O滱  CRT  !Y w#*A "Z*D "]*F "_>:Yܷœy y[]iu:[2Ͷ:%OHqqX1>  .H - > >:Ӱ082c>A `2%5!6#6 :Oyʶ:%gx0XDol(ˠ @t( 5 . %- og}:c0|! 57!" ~y/!62&/ > ͼbC { 7ɯO&  { % 7ɷO*q >_#> W2*N#~/ I({ 2"222s1:O!O F#N#fi !ƻ:W/G:lO*# (_!5_~ Ҧ: ӷ¦͞ æЀ  ˀ˩yq+Oxp>2Ͷ8h(˩H(ˀˀH ˩>2*o##"D8:<: ӷ > 2!ƻD*º*qq pn f *~  *~~G ?ڴ q#p>2a! 6 58Ͷ8H:c0 *F#N(((: FN6 6 ~ .` !V( *~~  pqÿ~_(  O(G(*ov:ӷ! ""*~"s222!>2 >2U ~º>22!~wU( ~wúϯ*~ #<(:!ӷʿ~wú*~ :R 2:Q ((1  m!ˮˎˆ#ˮ !# *o##"ӯ2~ą ~ :ӷ ɯ %ۄ ۅ1( >Ӆ>1ӄ>pӇ>ӆ& ۇw}& ۇ/}  ^ &ۇ_ } ͱ(ۇG ɯ<& } ˏ& `ۇ( } =2>ہ( w͡ ͡(>Ӈͱ(ۇG կ2>:ӆz:@3 }(  }8o<:@U [} xʻ }ӄ|Ӆ:Ӄ>ӂ> 2?i(H:?Ӈͱ(>ۇG 8_(4>02?i(%:?Ӈ GƯӄӅ<ӂ>Ӄ> ӇͱG.ۀ x !ۀ *"*" :>:@U> *o~<<_ !~#fo"į*o#F:ӆ͡>Ӂ* !_~2#  2>:P 2@!:@U! "":ӆ    B !  % $ ) 3 - 1 Q 5 ` 9 o = A~!O N#fi{*mֿȿ:?O!~O/ͩq!> !;!:wK:D=2>22ɯ ~v7*qq#p N#fi *B"*s#r#6 " CC Cs:A2i`z n& +c 2*"* "*o~ ###v(:8:jO ! [qs#r! :jO ! ^#VSq*o ~ #>(#~(>MOG#n( !C[q! N#F ! F?2^#V+ɷ*o  y2j!_ ~(k2kOC͗8a2l"m ^#V#N#F:lo& "o@ AO :lO "q8)2>͓ ܽ A~$# w++~'w0#~'w+ GOxGd0d 0 !!!! ! 2{Ͷ2:ͨW:ͨB(0 O= 0 :ͨ88O:ͨG ??OUD (0y xy(DGy<2߽> >$ !> g"::2޽:2ݽ:2ܽ*m>2ѽ x 7R0x >2ѽ7ZxNd8dͶ2xͶ2!н{Oz 8 YW#x 8xͶ2ώ A$w#Y$  :!彾ܐ:ܽ2:ݽ2:޽2>2ѽ:ͨG:x(dNG2ѽ! m :ͨO :ͨ=(Gнo 2 !" *"  !  @ ) !  @ ) !  @ )!~((#### y p#q#s#ro ͏v ʍ !O:2B ͏|>2z͏<2 ͏@,͏z͏|2y2 fÇ| f*u|Ç:yG 8!  )>2 Gy ҳs#r#<GyOx !  N#fiOf”ïfźM  ɺ*"*}"*"*"*"!x :|  1!|G^º>">"!}">">"!E"> $> >$>O#>#>J!!}#>!}!}!^#V#zǺ~##ںO +~#!9b ڗ>2#×:#<ֵ2#* ! ""++"29 Cw*{}<^#Vz!c! >c! Jw*q~69!͐=‡*":*}®: =::<>2*i^#V+ d! K*}@*)): K:) O "!w [O?WGzO:VxGyOGxw q*}}2—#͇ͱ * «#>2(͙ wB p'+!#:(w͚AP{" 2! W>O2 ø }-R* .)$:(r "ök*w()$*c()$-}-ͤÀk*s(" :(;$:r 2͚ù͚͚}/_|/* .W}_*c(" .}o|g"c(>2({2{2g*w( ʪ$Ң$Þ$+}$*(#}o|g:(O *s#r#w!~w/~@w//Hͥ* .>=)%_g:0%w:- %:(<%R$Hͥ:(>(~c!o#~E%^#V)$G#~#~!%~ b%% k%%##N#F#^#V#~#fo~o! o#~>T}! 6 **# K" G*~ xr ͐-xą@ 7(͚S!ʀq&& ͋"&@6,͚%Xͤ͋&͗wO~<:( g&~w#w#6 ##)͋&@ *  g&~?G++N͆p# Þ&͐*6!¿&?~p*6 &>2ͱ  !  !  ͷ w*o(w' ͧ B pͧ ,Úgsr ͐-͜ ͤ !S')_' ͤ̓ ~?w͐s-?F͜p!'̓ ¡'>2ͱ ?~¾'¾''''>w'͙ =2(͜!:(wÚ~̓ ʑ'pá'!(6 N N!(r )!( N ! )z<*)$"!" :X(*:(w :(w#:(w*2* }D #cdfg !"()  *{(X)^#V!"(:(<)! ~<<)^#V*(<)"("(x+)!(*(>X)*{()Q*:(_2({2(Ē*"(͂"X*~<)ҍ) -)a*ʚ)~)6 *(:(X*)!(:(T>q*k)!(:()-6>)ʴ+>2d,:+#++>29+2~2#! , , ,)x,) ,O +"!w [,O?WGzO:(V,xGyOG,xw q*}(}2*i(^#V+ d,!( K*}(@+*)):( K:(ڗ>2#-×:#-<)2#-*( ! ""++"(29- C-%w*{(}<^#Vz!(c-! >c-! J-w*q(~69!͐9b BI$"" HB @  UUUUUUUUUUUUUUUUUAPD A$! @ I  !@ D @BDI@ !B$ @$I$$ "@$$@@HHB D"D$H D@!IB@ A"B HBIB$$ " $ D$! "D$H$D$I@D BD" H$BHHBDHB"H!"!!$$HH !"BB$HHDA! " D"H $B!$! AI!$ $ H  H  A$I! I " $$BD"$H "AHD @  I  B" $$H @@@@" BHB  !I$ @ $@$ "$AI$$IBI$I H@ @I!$DA $ $@$ !$ !!" !$I@I $@ $ @! H"BI"HI DI HA DD$HH $  B D$ "I$I$H$ I !  $I$I$I $@HD$ @  !$"A$A D BI D B  @$$D D""I $BHI$IB ! @"BD B BD "@B @$ $BI I B$@" ! " H !$B I$ D@! !$  @ H!$$ D"@A @ DHII  D@@ $ DHI"D$ @  $ "" @ B!  @@D $$A$ $D "@I $A$$I!HI$ BA$ $DH $I$I"HI$I!$D B$"B I$$I$ !I$@DBB$@D@"I A!$ @  @  " $ $I$I$ B ! $@ I @I$ HBDH$ A$H!$D$ $I" B IIBB"$B@DH "$$ IH $$ !I"A D B!B     BI$A$"@$I $!!""@H! $ ! @I $ 1Td  CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282 6543210123456789ABCDEF ERROR: $Reading file: $Writing file: $Directory full$Reading file: $Writing file: $Invalid drive.$) ? $) ? $) ? $Bad character, re-enter $ $ Disk read error: $File cannot fit into GENCPM buffer: $Unable to open: $BDOS3 BIOS3 Setting up directory hash tables: $ Enable hashing for drive $: $Unable to allocate space for hash table.$ Setting up Allocation vector for drive $ Setting up Checksum vector for drive $ *** Bank 1 and Common are not included *** *** in the memory segment table. *** $Number of memory segments $ CP/M 3 Base,size,bank ($) $ Enter memory segment table: $ Base,size,bank $Zero length segment not allowed.$Bank one not allowed.$ ERROR: Memory conflict - segment trimmed. $Memory conflict - cannot trim segment.$ ERROR: Memory conflict - segment trimmed. $ ERROR: Memory conflict - segment trimmed. $ CP/M 3 Sys $ Memseg No. $ Bank $ Accept new memory segment table entries $Default entries are shown in (parens). Default base is Hex, precede entry with # for decimal $ Use GENCPM.DAT for defaults $Create a new GENCPM.DAT file $Display Load Map at Cold Boot $Number of console columns $Number of lines in console page $Backspace echoes erased character $Rubout echoes erased character $Initial default drive ($:) ? $Top page of memory $Bank switched memory $Common memory base page $Long error messages $Double allocation vectors $Accept new system definition $ CP/M 3.0 System Generation Copyright (C) 1982, Digital Research $ BNKBIOS3 SPR$BIOS3 SPR$BNKBIOS3 SPR$BDOS3 SPR$RESBDOS3 SPR$BNKBDOS3 SPR$ 64K TPA Copyright (C) 1982, Digital Research *** CP/M 3.0 SYSTEM GENERATION DONE ***$   !Tq:UM*T&  !Tp+q:Ud*T  !Tp+q*T#6 :UҀ:Tڀ*T  *T#N ! *T6  7 7!Tr+s+q+q!U6N*TDMN:TTN͜:T.:T/!U!] 6 !m 6 !Tp+q *T 6  *T 6 *T !Tp+q*T !Tp+q*T !Tp+q*T ] ͧ!Tp+q*T } ͧ!Tp+q*T   ͧ *T 6 !Tp+q*T !Tp+q*T! ͧ!Tp+q*T" ͧ! Up+q*T$ !Vr+s+p+q+q:V  *V*VDM*V -- !Vs+p+q:V J *V*VM!VLS!Vq:V e > :Va/>z!V/H҄ :V_2V:V!Vq:V />!V/HҦ >  ͧ> !Vp+q(7*V~ Y7 N7NTe:T *TMV Y*Vw!Vq:VO ! N7:VO ! N7!Vp+q 7*V|O *V}O H7!Vq*V&  +SDM$ !Vp+q!V6 !V60!'"V> V͇S† *VM7 !V6 >!V VVzSڽ !V6:V<2VVVzS+s#rÔ :V *VM7!V60*V! S"V:V<2V‹ !Vs+q(7:V  #7*V& DMZ  *VM N!Vs+p+q+p+q :T : ͜*V6 :V<2VO !T NV 2V  :V,u *V#"V*V6 !V6 :V#… !V6  :V02V:V> !VHҽ >!VҸ :V2Vý !V6!V:V *V^ *V& +S*V& *Vq !V6 *V6   ͧ *V6 ? ͜*VDMN*V~  (7*VN !V6>!Vn *V#"V:V:-Q/HX *V6 d ,7*VN :V<2V, *V++"VNÊ *VN*V !V6!V6Te!Vr+s+q:-Q/Ү > !V6#q#p!V6:5Q!Vڳ *V& +SFQ  VzSک:VM *V& +SFQ  ~  *V& +SFQ  VzSHJ:V2V *V& +SFQ  ^#V"Vé *V& +SFQ  ~  *V& +SFQ  VzSHҩ:V2V *V& +SFQ  ^#V"V:V<2V¿ :V:VH`!V6:5Q!V` *V& +SFQ  VzS/ *V& +SFQ  ~ H *V& +SFQ  VzSHV:V2V *V& +SFQ  ^#V"V:V<2V:V!$V6 !U6ͬ#Q$!H>  U͇Sʔ * U|2Uß *U|2U!U:.Q2T *U|!UO:/Q2T *U|O:T2TUTI:-Q/!$V>O:T2T * U|O:T!$V2T:T=2T * U|O:T2TҮ :-Qқ*nV*U*V  |!UO:/Q2T *U|O:T2T2Uͬ:U/Ҙ!!V6 >!!Vژ*!V& $SQ  6 :!V<2!Vsà!U6 :V/ҫ*:U2T:T2TTͩ:-Q*T&  +SDM*U*T&  +SDM*U:-Q/&:U2!V! ""V*!VM"V͟:!V2U! U6 Û *U|!U2!V * U|!Uo& )##""V*T&  +SDM*!V*!VM"V͟:!V2 U:U2!V! ""V>T͇S+s#r*!VM"V͟:!V2U * U|!$V2T:T2T U(T(TͩC *$V& +ST͊S+s#r * U|!$V2!V:-Q/ *T&  +SDM*!V"*T&  +SDM*!V*!VM"V͟:!V!Uw:-QҢ!T6:T2TULTLTͩ *U|2!V *U|!Uo& )*"V""V*T&  +SDM*!V*!VM"V͟:!V! Uw:,Q/Ҳ:V2V *V& U  :T2T*T& ! S!0 *V&  U q*T& ! S0 *V& !U q:V 2V *T& +S"!U$-U RUW !T6 #6 #6 :.Q2U:/Q2UTqT TyT Uͧ pT !T6Uͧ pT pT :;Rһ!;R6 :%V2.Q:4Q/24QTT TT L!U6N!Vr+s+p+q*V6 *V#6 *V|O ! *V## w*V|O !  *V w*V}O !  *V w*V}O !  *V w!T:TO `iPSW  "V *V :0Qw *V :2Qw *V :1Qw. *V :3Qw*V :4QwX *V   :+Q/ҼW *V >*V w:@*V wW *V >*V w^ *V :/Qw!)X"V*VN#F!W "V*V"V*V͕S(!$V6-!$V6 *VSD*VWR!"&V!V6&VS!V6 >!Vڷ*V& )*&V> ͒Sʭ*V& )*&VWR"(V *(V ͕Sʭ!V6 :V<2Vf:-Q/!V!$V6!$V6 V>X W*V"V*V~> >!Vs+p+q+p+q%N*VDMN 7*VDM$  7*VME :,QҨ *V& U *VDM :V 2V*V& U DM*V:V2V*V& U *V&  +S:V2V*V& U ) :V2V!Vp+q*V"TͣN ,ͧ*VDM !Vr+s+p+q*V^#V"T*V##^#V"T *V ^#V"T*V#DMT  *VDMT  *TZSU͊S@?ͧ*T+ZS}<2V!V6 !V:V҆ *V& +SW "TDMͧ *VDM> :V<2VS*TDMO W*T"T!Vr+s+q:V GTqT TyT *Vn}2T*V#~2TpT WTS} pS}TR+s#r*V& )+!Vs+6 :V!V4>T͇S+s#rBKͧ pT^ :V<2VpT *VT :-Q/k)Tw T z!LT"V!U"V͙!T"V!U"V͙!(T"V! U"V͙*V#DMT  *VDMT *VDMeͧWͧ *VDM> *V*Ws#r*V##*Ws#r *V *Ws#r*VDM> !V6 &VS(> !V6 >!V*V& )*&V> ͒S*V& )*&VWR"(V *(V##  *(V ͕S *(V ͕SH *(V ͕SH *(V ͕SH *(V ͕SH!V6:V<2V-:V!V6 !V6!V6 >!V*V& )*&VWR"(V*V& )*&V> ͒S *(V S?!V6  *(V ͕S:V/c!V6N:VO !=R ~2T *(V WR"*V **V N#F`i))"VN:VAO7N*V& 6Q DMʹ ͜*V& 6Q ~/ *(V q#p:-Q/!V6 *V& ,V) *Vs#r*V*LV"LV*V͛ 2V'  ͧ *V& +SFQ   *(V w *V& +SFQ N `iPS *V& +SFQ  N `iPS *V& +SFQ  ͕S  *(V q#p *V& +SFQ  VzS *V& +SFQ  q#p:V<2V:-Q/!V!$V6:T<<2T:T<<2T!V6 >!V8*V& NV) > w#6 *V& pV) > w#6 :V<2V:!Vڡ*V& )*&V> ͒Sʗ*V& )*&VWR"(V *(V WR"*V *(V ͕SN:VAO7:7!V6 **V ^#V! S*V& +S*V& NV) q#p*V& NV) nVR+s#r *(V ͕S—'N:VAO7:7!V6 **V >R! S*V& pV) s#r*V& ) VR+s#r **V  R*V& pV) CS **V q#p:V<2Vk:Vҫ͜:T2FQ!T:/Q2GQ! "IQ!HQ6 !V6 ON:GR2T 5Q N*FQM ,7*GQM ,7*HQM N:V/҈!N!V6:5Q!V !V6 :V/ :V =O !=R ~2T *V& +SFQ DM  *V& +SFQ  N `iPS *V& +SFQ  q#p *V& +SFQ  ~   ͧ  *V& +SFQ  ~ 7 ͧ  *V& +SFQ ~2V*V&  *V& +SFQ  N "V*V| *V}O:/QH҆MN!V:/Q *V& +SFQ  Hq!V:/QO `iPS *V& +SFQ  q#p *V}2V!V6 !V6!V:V#  *V& +SFQ ~2V *V& +SFQ  :V2V *V& +SFQ   *V& +SFQ  !V:V/+~!V/H+  | ͧ!V6 :V!V+~!VHc N *V& +SFQ :Vw!V6 :V!V+~!VH N!V:V *V& +SFQ  Hq!V:VO `iPS *V& +SFQ  q#p!V6 :V<2V×1:V<2V"͜!V6 :5Q!Vo!:V !N!N:V=O  *V& +SFQ NE  *V& +SFQ  NE :-Qb!N *V& +SFQ  N ͜:V<2V !T6 !V6%NVʹ ͜PNT2V!TT TT N!V6Vʹ ͜:V!FT !!U6+6 ! W6 ͌!: W/җ#:R2T͜N;Rʹ :=R2T͜͜N,Qʹ ͜͜:>R2T:2Q<22Q  2Q :2Q=22Q:?R2T:1Q<21Q' 1Q :1Q=21Q:@R2THN3Qʹ ͜:AR2TkN4Qʹ ͜͜:BR2TN:0QAO7NTe:T "*TMV A2W*WM͈ /"Þ":W20Q͜͜:CR2T.Q *.Q& PS "U:DR2TN-Qʹ ͜:-Q/2T:-Q[#:ER2T/Q ͜:FR2TN+Qʹ ͜x#:R2T͜N!W#*W& U 6 :W<2W#!W6>!W $*W& U 6$:W<2W#!V6*V& U  !V6TqT TyT Wͧ pT^ pT^ W S#ZS"U!W6 >!Wڋ$*W& ,V) > w#6 :W<2Wh$! "LV:] A$!U6#6 !W6 >!W$*W& =R 6 :W<2W¦$$!U6 #6:m D$!U6!T6 Available space in 256 byte pages: $TPA =$, Bank 0 =$, Other banks =$Unable to allocate Dir deblocking buffer space.$Unable to allocate Data deblocking buffer space.$Unable to allocate Data deblocking buffer space.$Drive specified has not been defined. $0FFFFH is an invalid value in the DPH directory BCB address field.$ Setting up Blocking/Deblocking buffers: $ The physical record size is$: $ *** Directory buffer required *** *** and allocated for drive $: *** $ Overlay Directory buffer for drive $: $ Number of directory buffers for drive $: $Minumum number of buffers is 1. $ Number of directory buffers for drive $: $ *** Maximum number of directory buffers *** *** for the current drive is$. *** *** Number of directory buffers reduced *** *** accordingly. *** $ Share buffer(s) with which drive ($:) ? $ *** Data buffer required and *** *** allocated for drive $: *** $ Overlay Data buffer for drive|:w:ʴ>2d:#Ϸ>29෯2~2#!   )xð*}*}"*x"xm*^#V* s#r**s#r* :﴾Y4Y̓**~#ng* s#r ^#V랚a##)0"xx! """XC*~<ζ*":! ::9 *"x"*"g* 3:= :Oi :=H:Gi a6:G/O* *W :T=ҍ aʚ~µ6 *:X)!:T>qkֵ!:6>X*{Q:_2{2Ē"͂"X~<µ #cdfg !"()  *N!r)! N! )z<*)"!":X*:w :w#:w*2*}D ̓¡>2ͱԬ߫?~¾¾ʳƳ>w͙=2͜:wÚ~̓ʑpá!6 N w ͧBpͧȸÚgsr͐-͜ě ͤ S)_ ͤ̓~?w͐s-?F͜pN͆p# Þ͐*6!¿?~p*6 >2ͱ ݬ Ԭ߫ ͷw*oq ͋"@6ȸ͚Xͤ͋͗wO~<: g~w#w#6 ##)͋@ *  g~?G++! o#~>T}! 6 **# K"G*~ xr͐-xą@ ˩7(͚Sʀw: :<RHͥ:>~c!o#~E^#V)G#~#~!~ b k##N#F#^#V#~#fo~o2{2g*wޟ ʪҢÞ+}*#}o|g:O*s#r#w!~w/~@w//Hͥ* >=)_g:0"ök*w)*c)-}ͤÀk*s":;:r2͚Μù͚Μ©͚}/_|/* W}_*c" }o|g"c>2{—>2—͇ͱ* «>2͙wBp+ү:w͚AP{ 2W>O2ø}R* ):r͚Μc2ZT͐-ڣ3͗@YsY̓Y׬Yͅ:߫Asү:@ү@ү$͚̓A؜=:<~?¯k î?~?ʾZT͐ڮ*>o"͒"!Þ:Oݠ"Ý}6͚ ~2Asv@NN~v$̓W+vw̚v$̓rrͅ:r߫>2+A@2r!Z2! "ög:2T͐-:ʹ>2<2ڣ!w: >2*6 ݠݣO~<w:*)@ u:G*g` ~!x_<_@*oy<:/G?~##~? 6K@?F6 ##N6 ⬯2p##q:#*~w> 2*p@! ~*"v@*w# ) 6 #̬͙  N#FxT]## #~ ȷ  *4# ' 4!  *~^ ^33G# Pv:dv6  y2@ !״)#w*~"ҫ!Fw䫨ҫ̓ҫ:w̚":>寯2̓*~wć"̀ !~$6 :03i"!~6 * >=)Q!QX@ ˩ > 2 ˩!! q#p#w2wW* _3ҫ-!s:!xQ*:<œ. ʩ.ʩAܙrr##sܙ<}r cN ! ~态O> G~G! ~G~o> _yG~.|°! w:ck[! x?[! ~ʤ͆[͗PPvqO-á=.:<ʰ! Vq##~_@wڴͶ:WMںʛ>úͶ >TJ:!ʷ ͞x!Ǩw4 ϨPWިPܙÂՙÂ*!! ~~#~O~#FsO s#r:(„y==„*!^W*y^#Vx7=2wͼկw#KWK*"J T͞*: ["+SX:ڜq:ʺ!ʵ>2 ܙͤ2 ѧO ̛DM͸}ާ>r""2:2* ::: 29:>:>*ڈ>F6:_/G:ʧ:ڨ|OͤG:_O ̛̛zW{¦|:*}|BKN¦ zyG:!vq:vՙvMڂ?Ͷ >T͓Â! ">Â:G:O:h=27ryy/W!:l=:<>w##~2 4~?ɥ̓¹:<ɥɥüޣAX2rK:w++~=wv4͗O5:2X!"*>o+"v *!b"ݠ": r#~?w#>r# L=J Lv  wȸbܙ?~O ͆ڥ†wŒ~è# # x ͗w ٤ڤ٤ڤw@ ~wb͐Úݞ! x>w~6 :6~#+w#w+ ~;wɯ2KOFq-yl?Np g:ʓ~( ȸˆʀHÈ2xą  ):@ΣO~#w͚ʀô̓b_++V@* )͗Os++r ~Gw# * #~$%+@*9>  #>? ;*~ w-xąH"0 *ĊHEʀ@~›:6¦w͚ ̋ȸÇPY*{zBKNyʺ Nú2: *~w *" ݠ2>ʄ@~k:(s~*9~Ês~Ԭ~ͅ<G:<ޡ2x# W:<­:22G?>Grx~:2Ô##~*$*">2̀2kº ʺ**iҺ@:O ~2~WW:2Ôyʛ?ʔx ʔ |̷ǡÔN:r:/GyOOA +¬ ¢y2:x¹o& :W>OͫE:ڟ?N/*"y2ͦ>2 ݠRXޟDM*w6 # x *ow**ws#r̀*i6#6 *}"j@*|<ď>!8>8> t>nͦv8 ~*ownT] KKͦޟ*w"wͦ"w@  :ßN ɟ N#Fy؟*}|h#ð*ͫ# 6 *q @!"@**#":&2͒:È0:+Òy<_W`iͫDM*w ~bNpwޟDM*we ^#V#~2>â9͆>! "*y³*X*ÿ͂"*g* K!~<:wb##>w#wě> r!~#22Zw*q>ww:c *#*is#r*:!:) :O! *c:Oͫ}@2æ ~á*g:o$* ~K6 ?~wKw**i{#zir+s{O:w:Ғ4~:w?r##rp# ä |g}oì*g  #G ¾1*q:*w***> r 2":O:G2!w* ~zWw+ !z?#~*! * * G! O~2~m͗O~t>2?:2g͝DM*0MD"!*MD$:Oë!N: «G>O: ›ù* ě :ڛn` ~#foͤ2O ̛"}:O*" !s#r#p*kN#F*m^#V#F*:O}|y9*+"*}|yP#9**DM"*ks#r*ms#r#pyox*kw#w*mw#w#w>2'å2*OͶyڲò<* Ͳ:0!::ò2*>*ͫ"4#4#4)7 #  w#*J|^#V#"i##"k##"m###"o#"q##"!s )*s!)*|!6~6 7rror File Exists ? in Filename òò>2a.":2:<:55;:2ɯ22{_zW{_zW )7 CP/M Error On : Disk I/O Invalid Drive Read/Only File Read/Only Disk Password E )"!z<~rs^#V#N#FxN:oʲ̀õ(# Þ ry< <<%zrͷr6r9rMDÌ:o!6!h: ʚnt2 r6 2>rz<*9ʌ^:—~x ):*:ŕŕ>*(+"(w++2+2+ɑpؑ! " >2+2*jx.#NzW::!2W!5=^x^z:m:*;#wO:͂^2¢ů͠Ĕ:!ڽ*(~ݒג5WèՔؑjגM2ͨxΔ*(+w"(j͐ !%"(^-:*$P:<\:W:2xM s:<9>2:*9x~+q’x2:**&~2+o#"&!+6Mœ:W:2x ͺ*(+"(w  :ܓ>2*2:*(:+w"(ͺ:G::+̜2 5*(~o#"(Mš*(~`Uoj*(~#"(Ñ!*~6 s!+6 :+‚xoڊ{2Ó#w:2.+:.2-!%"(2*!—"&!*~4:2-Ԃ:G ͳͨ^2+>2:2*N#G2 2GH)+6 :2,:!- ͐:,!͐+*( ~L#Bxz:*:*(~ʓOr ͐ ͐! O(Ì*(~2**}ʷ!#¶! ""÷:_:*(#wΑxH!—)6 "&:!— x5~y 5 6 y(^͐@O:=7:͐y ͐:I ͐:=e: zz#͐͂:! ͐ G:Ҏ>xʝʝw>ɯw̩z:»!>wɯ:=zxzz::G:=/ͽx:Āy!4 šn!6@G:x: P:<: P n6  t6 ! ^6 t6 u:)<͠^!T] KKͦޟ*w"wͦ"w@  :ßN ɟ N#Fy؟*}|h#ð*ͫ# 6 *q @!"@**#":&2͒:È0:+Òy<_W`iͫDM*w ~bNpwޟDM*we ^#V#~2>â9͆>! "*y³*X*ÿ͂"*g* K!~<:wb##>w#wě> r!~#22Zw*q>ww:c *#*is#r*:!:) :O! *c:Oͫ}@2æ ~á*g:o$* ~K6 ?~wKw**i{#zir+s{O:w:Ғ4~:w?r##rp# ä |g}oì*g  #G ¾1*q:*w***> r 2":O:G2!w* ~zWw+ !z?#~*! * * G! O~2~m͗O~t>2?:2g͝DM*0MD"!*MD$:Oë!N: «G>O: ›ù* ě :ڛn` ~#foͤ2O ̛"}:O*" !s#r#p*kN#F*m^#V#F*:O}|y9*+"*}|yP#9**DM"*ks#r*ms#r#pyox*kw#w*mw#w#w>2'å2*OͶyڲò<* Ͳ:0!::ò2*>*ͫ"4#4#4)7 #  w#*J|^#V#"i##"k##"m###"o#"q##"!s )*s!)*|!6~6 7rror File Exists ? in Filename òò>2a.":2:<:55;:2ɯ22{_zW{_zW )7 CP/M Error On : Disk I/O Invalid Drive Read/Only File Read/Only Disk Password E )"!z<~rs^#V#N#FxN:oʲ̀õ(# Þ ry< <<%zrͷr6r9rMDÌ:o!6!h: ʚnt2 r6 2>rz<*9ʌ^:—~x ):*:ŕŕ>*(+"(w++2+2+ɑpؑ! " >2+2*jx.#NzW::!2W!5=^x^z:m:*;#wO:͂^2¢ů͠Ĕ:!ڽ*(~ݒג5WèՔؑjגM2ͨxΔ*(+w"(j͐ !%"(^-:*$P:<\:W:2xM s:<9>2:*9x~+q’x2:**&~2+o#"&!+6Mœ:W:2x ͺ*(+"(w  :ܓ>2*2:*(:+w"(ͺ:G::+̜2 5*(~o#"(Mš*(~`Uoj*(~#"(Ñ!*~6 s!+6 :+‚xoڊ{2Ó#w:2.+:.2-!%"(2*!—"&!*~4:2-Ԃ:G ͳͨ^2+>2:2*N#G2 2GH)+6 :2,:!- ͐:,!͐+*( ~L#Bxz:*:*(~ʓOr ͐ ͐! O(Ì*(~2**}ʷ!#¶! ""÷:_:*(#wΑxH!—)6 "&:!— x5~y 5 6 y(^͐@O:=7:͐y ͐:I ͐:=e: zz#͐͂:! ͐ G:Ҏ>xʝʝw>ɯw̩z:»!>wɯ:=zxzz::G:=/ͽx:Āy!4 šn!6@G:x: P:<: P n6  t6 ! ^6 t6 u:)<͠^!ROM USER 1 A>PIP newdraft.txt=oldraft.txt[g1] COPY TO/FROM LOGICAL DEVICES A>PIP b:funfile.sue=con: A>PIP lst:=con: A>PIP lst:=b:draft.txt[t8] A>PIP prn:=b:draft.txt ///2options PIP OPTIONS A Archive. Copy only files that have been changed since the last copy. C Confirm. PIP prompts for confirmation before each file copy. Dn Delete any characters past column n. E Echo transfer to console. F Filter form-feeds from source data. Gn Get from or go to user n. H Test for valid Hex format. I Ignore :00 Hex data records and test for valid Hex format. K Kill display of filespecs on console. L Translate upper case to lower case. N Number output lines O Object file transfer, ^Z ignored. Pn Set page length to n. (default n=60) Qs^Z Quit copying from source at string s. R Read files that have been set to SYStem. Ss^Z Start copying from the source at the string s. Tn Expand tabs to n spaces. U Translate lower case to upper case. V Verify that data has been written correctly. W Write over Read Only files without console query. Z Zero the parity bit. All options except C,G,K,O,R,V and W force an ASCII file transfer, character by character, terminated by a ^Z. ///1PUT Syntax: PUT CONSOLE {OUTPUT TO} FILE filespec {option} | CONSOLE PUT PRINTER {OUTPUT TO} FILE filespec {option} | PRINTER PUT CONSOLE {OUTPUT TO} CONSOLE PUT PRINTER {OUTPUT TO} PRINTER Explanation: PUT puts console or printer output to a file for the next command entered at the console, until the program terminates. Then console output reverts to the console. Printer output is directed to a file until the program terminates. Then printer output is put back to the printer. PUT with the SYSTEM option directs all subsequent console/printer output to the specified file. This option terminates when you enter the PUT CONSOLE or PUT PRINTER command. ///2Options [ {ECHO | NO ECHO} {FILTER | NO FILTER} | {SYSTEM} ] ECHO specifies that output is echoed to the console. This is the default option when you direct console output to a file. NO ECHO specifies that file output is not echoed to the console. NO ECHO is the default for the PUT PRINTER command. FILTER specifies filtering of control characters, which means that control characters are translated to printable characters. For example, an ESCape character is translated to ^[. NO FILTER means that PUT does not translate control characters. This is the default option. SYSTEM specifies that system output as well as program output is writt $: $ Number of data buffers for drive $: $Minumum number of buffers is 1. $ Number of data buffers for drive $: $ Share buffer(s) with which drive ($:) ? $ Allocate buffers outside of Common $ Accept new buffer definitions $!W6 >!W**W& )*&V> ͒S**W& )*&VWR"(V ͕S *(V ͕SHҸ* *(V WR"*V **V ^ 6 *W& $SQ q#p*W& $SQ  6  *(V ͕S*% ͧ!W4*!W6 >!W+! "HW}2W>!W=+*W& $SQ HW|S ~ H6+*W& $SQ ^#V"HW!W4**W& ))lW *HWs#r*W& ))  > w#6 !W6 >!W+*W& $SQ HW|S> ͇SH+*W& ))lW  *W 6 DS+s#r*W& $SQ  6!W4h+!W4*!W6 >!W7, *W& +SFQ  *W& W) N#Fq#p *W& +SFQ  *W& 7W w!W4+:-QF,!fW6K,!fW6 !W6 :W4:fW=2iW! "gW"dW}2 W! W6*T& PS*LViS"bW:-Qڞ,nVbWzS*ViS"bW!W6 >!W,*W& W)  *W& +SKQ  N#Fq#p*W& $SQ  6 !W4£,!W6 ! W6#6!W6 n& ))lW  ^#V"JW*W& ))lW > ͒S:WH3:WE-1&N!W6]&N*W& ))lW N#F$ {&N!W6 >JWR>fS:WHҚ-!JWVS+s#r!W4g-!JWVS+s#r:W3*W& )*&VWR"(V WR"*V >RZS"^W **V  ͕S-!W6-!W6  *(V ͕Sc0bB*W& $SQ  >w:-Q.: Wd.! W6 *W& $SQ  6&N:WAO7&N.:W{O !=R ~2T&N:WAO7'N*W& $SQ  DMʹ ͜*W& $SQ  ~.*W& $SQ  6.*W& $SQ  6 t/:W;O !=R ~2T'N:WAO7>'*W& $SQ  DM  : Wt/! W6 *W& $SQ  ~ t/ A' ͧb'N:WAO7'*W& $SQ  DM  &/*W& $SQ  ~^W͇Sҹ/'N*^WDM$ 'N*W& $SQ  *^Ws*W& $SQ  ~ R0:W[O !=R ~2TM(N*W& $SQ  ~AO7(NTe:T L0*TMV A2 W* WM͈ *0/* WMF80/*W& $SQ  : Ww͜c0*WMTC c0 4 *(V ͕Sn3!W6 *W& $SQ >͒S°0 *(V q#p*W& $SQ  6 n3bB*W& $SQ  >w:-Qګ1: W1:W1! W6!W6*W& $SQ  6(N:WAO7(N1: W1!W6! W6 :Wʨ1:WƋO !=R ~2T(N:WAO7)N*W& $SQ  DMʹ ͜*W& $SQ  ~ґ1*W& $SQ  6 è1*W& $SQ  6! W6S2:WKO !=R ~2T)N:WAO76)*W& $SQ  DM  *W& $SQ  >w: WS2! W6 *W& $SQ  ~ S2 9) ͧZ)N:WAO7)*W& $SQ  DM  2*W& $SQ  ~ $3: WҌ2! W6 *W& $SQ  :Ww 3:WkO !=R ~2T)N*W& $SQ  ~AO7)NTe:T 3*TMV A2 W* WM͈ 2Ü2* WMF2Ü2*W& $SQ  : Ww͜*W& $SQ  :Wwn3:U!W]3:W+O !=R ~2T)N*W& $SQ  DMʹ ͜*WMTC n3 4! W6 *W 6 dWDS+s#r!W4>JWR>fS:WHҿ3!JWVS+s#r!W4Ì3!JWVS+s#rç-!W4n& ))lW  ^#V"JW-!T6 !W6:W 4bB)NWʹ ͜P,! "PW}2Wo& "TW2W>!Wu5*W& $SQ  ~ n5*W& $SQ  ~  >Hһ4:-Q|4!W4á4*W& $SQ ! ^ N#F-S*TW"TW*W& $SQ  ^ *PW"PW*W& $SQ  ~  >Hn5:-Q/5!W4*W& $SQ  ~,5*W& $SQ ! ^ N#F-S*TW"TWT5*W& $SQ ! ^ N#F-S*TW"TW*W& $SQ  ^ *PW"PW!W4#4*fW& *PW+S*W& ) "RW:-Q9W*U"jW*RW*U*TW *LV *V *nV  |O:.QO:T2UO:T2T:T2T:T2T|2U!T2.QW"T*T& PS*U "ZW*RW "VW*T"`W*`WW !T͕SC6*`WW 6 *`W#"`W6!W6 n& ))lW  ^#V"JW*W& ))lW > ͒S:WH9!W6 >JWR>fS:WHҶ6!JWVS+s#r!W4Ã6!JWVS+s#r:W8*W& )*&VWR"(V*W& $SQ  >«7*W& $SQ  ~ h7*jW6 *jW *VWs#r*W& $SQ VWR+s#r *(V *ZWs#r:fWZWR+s#r:fWjWR+s#rë7*(V"LW*W& $SQ  n& )*&VWR"(V ^#V"NW*LW"(V *NWs#r*W& $SQ  >£8*W& $SQ  ~ 48*jW6 *jW *VWs#r*W& $SQ VWR+s#r *(V *ZWs#r:fWZWR+s#r:fWjWR+s#rã8*(V"LW*W& $SQ  >o& )*&VWR"(V!Q  > ʂ8 *(V ^#V"NWÐ8 *(V ^#V"NW*LW"(V *NWs#r!W4>JWR>fS:WH8!JWVS+s#r!W4ç8!JWVS+s#r6!W4n& ))lW  ^#V"JW\6!W6 >!Wc9*W& ,V) > ͒S\9*W& )*&VWR"(V *VWs#r*W& ,V) VWR+s#r!W4 9!W6 >!W9*W& )*&VWR"(V*W& NV) > ͒Sʽ9 *(V *VWs#r*W& NV) VWR+s#r*W& pV) > ͒S9 *(V *VWs#r*W& pV) VWR+s#r!W4h9aB!W6 >!W::*W& W)  *W& +SFQ  N#Fq#p!W4:*V*RW*nV "RW>  U͇SUzSH҇:*TW*U |O:.QO:T2Uá:*TW* U |O:.QO:T2U!U:T2T:T2T:T2T:.Q2.Q* U} pS} URU͊S"`W>  U͇SUzSHB; *RW|O:/Q2T*U}pS}URW"\W*T& PS"XW*T& PS*U "VWÇ;*RW*`W |O:/Q2TW*U"\WO `iPS*`W "XW*T& PS* U "VW*RW*\W"T *U|O:T2T*W& )*\W"jW*XW"ZWWTS"U*T"`W*`WW !T͕S;*`WW 6 *`W#"`W;!W6!W6 !W6:5Q!WS< *W& +SFQ  2W!FQ  ~ :W!WHL<:W2W:W2W!W4;:T2FQ!T:/Q2GQ:W< *W& +SFQ  O:T< *W& +SFQ  N `iPS! ͕S"`W!FQ :T w *W& +SFQ  N `iPS*`WiS! q#p!W6 n& ))lW  ^#V"JW*W& ))lW > ͒S:WHғA!W6 >JWR>fS:WHh=!JWVS+s#r!W45=!JWVS+s#r:WxA*W& )*&VWR"(V*W& $SQ  >0?*W& $SQ  ~ >*(V"LW*W& $SQ  n& )*&VWR"(V ^#V"NW*LW"(V *NWs#r0?*\W*ZWs#r *(V *XWs#r*XW##"XW*\W##"\W!W6*W& $SQ  ~!W ?*W& $SQ ^#V͛ 2W*jW6 *W& +SFQ N `iPS! N `iPS! ͕S  *jW q#p *jW 6  *W& +SFQ  *W& $SQ |S+s#r:fWZWR+s#r *jW s#r:fWjWR+s#r!W46>:fWjW͇S+s#r! > w#6 :fWjWR+s#r*W& $SQ  >1A*W& $SQ  ~ ¤?*(V"LW*W& $SQ  n& )*&VWR"(V ^#V"NW*LW"(V *NWs#r1A*\W*ZWs#r *(V *XWs#r*XW##"XW*\W##"\W!W6*W& $SQ  ~!W A*W& $SQ  ~ҩ@*W& $SQ ^#V͛ 2W*jW6 *W& +SFQ N `iPS! N `iPS! ͕S  *jW q#p *W& +SFQ   *jW w *W& +SFQ  *W& $SQ |S+s#r@*jW6 *jW *VWs#r*W& $SQ VWR+s#r *jW 6 :fWZWR+s#r *jW s#r:fWjWR+s#r!W4?:fWjW͇S+s#r! > w#6 :fWjWR+s#r!W4>JWR>fS:WHhA!JWVS+s#r!W45A!JWVS+s#ru=!W4n& ))lW  ^#V"JW=!W6 >!WA*W& 7W  *W& +SFQ  w!W4˜A!W6 >!WaB*W& )*&VWR"(V*W& NV) > ͒S"B *(V *ZWs#r*W& NV) ZWR+s#r*W& pV) > ͒SZB *(V *ZWs#r*W& pV) ZWR+s#r!W4A! "W"W!W6:5Q!WB *W& +SFQ  ~ ¶B *W& +SFQ  VS*W"WB *W& +SFQ  VS*W"W!W4pB$N%N!bWVSDM$ :-QMC%N*WDM$ :U C$%N*WDM$ > W͇S> W͇SHHC!W6MC!W6 ͜͜!Ws+q*W& $SQ ^#V"W:-QڋC:fWWRbW͊S+s#rF!iW55:W®D*W& $SQ  ~2W!W6:W!WګD!fW:iWYD!iW6*gW#"gW!W6!W6 !W6:5Q!W7D *W& +SFQ  2W!FQ  ~ :W!WH0D:W2W:W2W!W4C *W& +SFQ   S+s#rcD!fW:iW2iW*W͛ 2W…D 4% ͧ> äD *W& +SFQ  WzS+s#r!W4±CF*W& $SQ  ~2W!W6:W!WF!fW:iWoE!iW6*gW#"gW!W6!W6 !W6:5Q!WME *W& +SFQ  2W!FQ  ~ :W!WHFE:W2W:W2W!W4D *W& +SFQ   S+s#ryE!fW:iW2iW*W& $SQ  ~ڼEWbWzS+s#rYS:/QpSҹE d% ͧ> E*W͛ 2WE % ͧ> E *W& +SFQ  WzS+s#r!W4D>!Wq*W 6 dWR> fS'F>  % ͧ>ERROR: $ at line $Missing parameter variable$Equals (=) delimiter missing$Invalid drive ignored$Invalid character$Invalid parameter variable$! "WWͧ !W6!W6 :W GG:WG͈K2W:WFIGF GF!Wr+s+q:U2W!U65FN*WDMN>FN*WDMZ :WCG.͜:W2U:WoG!W6 T lG!W6sG!W4MG*W& W ~2W:W :W H:W HG:W ·G*W#"WMG*W& W ~2WÄG:Wa/>z!W/HG:W_2W:WG!W6:W!W6 :W/:W/HI!W6 >!W/H*W& W 6 !W4HtG2W!W6 :W:W=H:W H:W/H~H*W& W :WwtG2W!W4:H:W=:W H:W/HҧHtG2W~H:W I:W=> !WHH!W6 I:W=HHF GH:W HcF G:W :W/H ItG2WHGtG2W!W6 !T:W:W H:W/H[I*W& T :Ww!W4~`i+wtG2WI:W :W/HxItG2W[I!W6 #6> !W҇K *W& +S P  ^#V"W! P  ~2W J:W I:WA2WI:W0/>9!W/HI:W02WI:WA 2W *W& +S P  ^ *W& +S*W"W*W& T ~?[J *W& +S P  :WO !=R 6!U6!W4!T5> !T҇K:W ʧJ*W& T ~A/>P/HҜJ*W& T ~A*WwäJF GÇK:W J*W& T ~Y*WwÇK!W6*W6 !W6 :T=!WڇK:W!WO !T ~2W, K*W#"W6 !W6ÀK:W#K!W6 ÀK:W02W:W> !WHQK>!WLK:W2WQK!W6!W:WxK*W^ *W& +S*W& sÀKF G!W4J!W6 !W6 :W:W/HK!W6 :W *W& +S P *W& *W& W HK!W4éK:WK!W6K!W4ÒK:WL>:WWͧ T. T~ !W6!W6 >!WN!W6 #n&  +S P  ~2W!W6 :W:W/H N!W6 >!WڞL'N *W& +S P *W& *W& W w!W4gL:W °L!W6L:W L:WA*W& W wL:W L:W0*W& W wL:WA *W& W w'N*W& W 6 'N*W& W 6='N*W& W 6  *W& +S P  ! ^ *W& +SR"W:W mM'N*W~A*W& W wM:W ʞM'N*W~ҐM*W& W 6YÛM*W& W 6NM*WNbN:WM'N*W& W 6,*W#"W*WNbN'N*W& W 6,*W#"W*WNbN'N*W& W 6 'N*W& W 6 !W4PL!W4'L>!W NT^ T :W]NT^ !W6 >!WUN*W& W 6!W4:N!W6 aN!W4!Wq'N:WO ! *W& W w'N:WO ! *W& W wO *TDM}oN*T †O] !O> 2 PW:TgxʀO { O: PO*T !O†O~#o}o|O<O:TzO<.O:TƜzO<8O:TzO:TzO:TotOzO:TgN! |!| PRTMSG  ,QPAGWID 2QPAGLEN 1QBACKSPC 3QRUBOUT 4QBOOTDRV 0QMEMTOP .QBNKSWT -QCOMBAS /QLERROR  +QNUMSEGS  5QMEMSEG00 KQHASHDRVA6QALTBNKSA +QNDIRRECA ;QNDTARECA KQODIRDRVA [QODTADRVA kQOVLYDIRA {QOVLYDTAA QCRDATAF ;RDBLALV ))덑o|gS =S^#V))) DM! >)):S =2S_ og^#V) PS^#V|g}o ZS_ {ozgO {ozgi`N#Fogo& og_ {_z#W BNKBIOS3SPR RESBDOS3SPR BNKBDOS3SPR CPM3 SYS GENCPM DAT . $LINK BNKBIOS3=MBIOS3KP,WIN3KP,FDC3KP,CRT,KEYBD,SERIAL,CENTR,END,LPTBL,GETDP3KP,SCB[B,OS,$$SZ] en to the file specified by filespec. Output is written to the file until a subsequent PUT CONSOLE command redirects console output back to the console. ///2Examples A>PUT CONSOLE OUTPUT TO FILE XOUT [ECHO] Directs console output to file XOUT with the output echoed to the console. A>PUT PRINTER OUTPUT TO FILE XOUT A>MYPROG Directs the printer output of program MYPROG to file XOUT. The output is not echoed to the printer. A>PUT PRINTER OUTPUT TO FILE XOUT2 [ECHO,SYSTEM] Directs all printer output to file XOUT2 as well as to the printer (with ECHO option), and the PUT is in effect until you enter a PUT PRINTER OUTPUT TO PRINTER command. A>PUT CONSOLE OUTPUT TO CONSOLE Directs console output back to the console. A>PUT PRINTER OUTPUT TO PRINTER Directs printer output back to the printer. ///1RENAME Syntax: RENAME {new-filespec=old-filespec} Explanation: RENAME lets you change the name of a file in the directory of a disk. To change several filenames in one command use the * or ? wildcards in the file specifications. The RENAME command can be abbreviated REN. REN prompts you for input. ///2Examples A>RENAME NEWFILE.BAS=OLDFILE.BAS The file OLDFILE.BAS changes to NEWFILE.BAS on drive A. A>RENAME The system prompts for the filespecs: Enter New Name:X.PRN Enter Old Name:Y.PRN Y .PRN=X .PRN A> File X.PRN is renamed to Y.PRN on drive A. B>REN A:PRINTS.NEW = PRINCE.NEW The file PRINCE.NEW on drive A changes to PRINTS.NEW on drive A. A>RENAME S*.TEX=A*.TEX The above command renames all the files matching A*.TEX to files with filenames S*.TEX. A>REN B:NEWLIST=B:OLDLIST The file OLDLIST changes to NEWLIST on drive B. Since the second drive specifier, B: is implied by the first one, it is unnecessary in this example. The command line above has the same effect as the following: A>REN B:NEWLIST=OLDLIST or A>REN NEWLIST=B:OLDLIST ///1RMAC Syntax: RMAC filespec {$Rd | $Sd | $Pd} Explanation: RMAC, a relocatable macro assembler, assembles .ASM files of into .REL files that you can link to create .COM files. ///2options RMAC options specify the destination of the output files. Replace d with the destination drive letter for the output files. Option d=output option R- drive for REL file (A-O, Z) S- drive for SYM file (A-O, X, P, Z) P- drive for PRN file (A-O, X, P, Z) A-O specifies drive A-O. X means output to the console. P means output to the printer. Z means zero output. ///2Example A>RMAC TEST $PX SB RB Assembles the file TEST.ASM from drive A, sends the listing file (TEST.PRN) to the console, puts the symbol file (TEST.SYM) on drive B and puts the relocatable object file (TEST.REL) on drive B. ///1RSXRM Syntax: RSXRM name Explanation: The RSXRM Command instructs a cooperating RSX to schedule itself for removal. The target RSX must intercept and understand BDOS function 60 with an RSX PB FUNC of 113 and PARAMETER1 pointing to an 8-character blank-padded string representing the name of the RSX to remove. If an RSX is loaded multiple times, only the first instance will remove itself. Example: A>RSXRM NDOS3 ///1SAVE Syntax: SAVE Explanation: SAVE copies the contents of memory to a file. To use SAVE, first issue the SAVE command, then run your program which reads a file into memory. Your program exits to the SAVE utility which prompts you for a filespec to which it copies the contents of memory, and the beginning and ending address of the memory to be SAVEd. ///2Example A>SAVE Activates the SAVE utility. Now enter the name of the program which loads a file into memory. A>SID dump.com Next, execute the program. #g0 When the program exits, SAVE intercepts the return to the system and prompts the user for the filespec and the bounds of memory to be SAVEd. SAVE Ver 3.0 Enter file (type RETURN to exit):dump2.com If file DUMP2.COM exists already, the system asks: Delete dump2.com? Y Then the system asks for the bounds of memory to be saved: Beginning hex address: 100 Ending hex address: 400 The contents of memory from 100H (Hexadecimal) to 400H is copied to file DUMP2.COM. ///1SET Syntax: SET [options] SET d: [options] SET filespec [options] Explanation: SET initiates password protection and time stamping of files. It also sets the file and drive attributes Read-Write, Read-Only, DIR and SYS. It lets you label a disk and password protect the label. To enable time stamping of files, you must first run INITDIR to format the disk directory. ///2Label Syntax: SET {d:} [NAME=labelname.typ] SET [PASSWORD=password] SET [PASSWORD= ///3Examples A>SET [NAME=DISK100] Labels the disk on the default drive as DISK100. A>SET [PASSWORD=SECRET] Assigns SECRET to the disk label. A>SET [PASSWORD= Nullifies the existing password. ///2Passwords SET [PROTECT=ON] SET [PROTECT=OFF] SET filespec [PASSWORD=password] SET filespec [PROTECT=READ] SET filespec [PROTECT=WRITE] SET filespec [PROTECT=DELETE] SET filespec [PROTECT=NONE] SET filespec [attribute-options] ///3Modes Password Protection Modes Mode Protection READ The password is required for reading, copying writing, deleting or renaming the file. WRITE The password is required for writing, deleting or renaming the file. You do not need a password to read the file. DELETE The password is only required for deleting or renaming the file. You do not need a password to read or modify the file. NONE No password exists for the file. If a password password exists, this modifier can be used to delete the password. ///2Attributes RO sets the file attribute to Read-Only. RW sets the file attribute to Read-Write. SYS sets the file attribute to SYS. DIR sets the file attribute to DIR. ARCHIVE=OFF means that the file has not been backed up (archived). ARCHIVE=ON means that the file has been backed up (archived). The Archive attribute can be turned on by SET or by PIP when copying a group of files with the PIP [A] option. SHOW and DIR display the Archive option. F1=ON|OFF turns on or off the user-definable file attribute F1. F2=ON|OFF turns on or off the user-definable file attribute F2. F3=ON|OFF turns on or off the user-definable file attribute F3. F4=ON|OFF turns on or off the user-definable file attribute F4. ///3Examples SET [PROTECT=ON] Turns on password protection for all the files on the disk. You must turn on password protection before you can assign passwords to files. SET [PROTECT=OFF] Disables password protection for the files on your disk. A>SET MYFILE.TEX [PASSWORD=MYFIL] MYFIL is the password assigned to file MYFILE.TEX. B>SET *.TEX [PASSWORD=SECRET, PROTECT=WRITE] Assigns the password SECRET to all the TEX files on drive B. Each TEX file is given a WRITE protect mode to prevent unauthorized editing. A>SET MYFILE.TEX [RO SYS] Sets MYFILE.TEX to Read-Only and SYStem. ///2Default A>SET [DEFAULT=dd] Instructs the system to use dd as a password if you do not enter a password for a password-protected file. ///2Time-Stamps Syntax: SET [CREATE=ON] SET [ACCESS=ON] SET [UPDATE=ON] Explanation: The above SET commands allow you to keep a record of the time and date of file creation and update, or of the last access and update of your files. ///3Options [CREATE=ON] turns on CREATE time stamps on the disk in the default or specified drive. To record the creation time of a file, the CREATE option must be turned on before the file is created. [ACCESS=ON] turns on ACCESS time stamps on the disk in the default or specified drive. ACCESS and CREATE options are mutually exclusive; only one can be in effect at a time. If you turn on the ACCESS time stamp on a disk that previously had CREATE time stamp, the CREATE time stamp is automatically turned off. [UPDATE=ON] turns on UPDATE time stamps on the disk in the default or specified drive. UPDATE time stamps record the time the file was last modified. ///3Examples A>SET [ACCESS=ON] A>SET [CREATE=ON,UPDATE=ON] ///2Drives Syntax: SET {d:} [RO] SET {d:} [RW] Example: A>SET B: [RO] Sets drive B to Read-Only. ///1SETDEF Syntax: SETDEF { d: {,d: {,d: {,d:}}}} {[ TEMPORARY = d: ] | [ ORDER = (typ {,typ}) ]} SETDEF [DISPLAY | NO DISPLAY] SETDEF [PAGE | NOPAGE] Explanation: SETDEF allows the user to display or define up to four drives for the program search order, the drive for temporary files, and the file type search order. The SETDEF definitions affect only the loading of programs and/or execution of SUBMIT (SUB) files. SETDEF turns on/off the system Display and Console Page modes. When on, the system displays the location and name of programs loaded or SUBmit files executed, and stops after displaying one full console screen of information. ///2Examples A>SETDEF Displays current SETDEF parameters. A>SETDEF [TEMPORARY=C:] Sets disk drive C as the drive to be used for temporary files. A>SETDEF C:,* Tells the system to search for a program on drive C, then, if not found, search for it on the default drive. A>SETDEF [ORDER=(SUB,COM)] Instructs the system to search for a SUB file to execute. If no SUB file is found, search for a COM file. A>SETDEF [DISPLAY] Turns on the system display mode. Henceforth, the system displays the name and location of programs loaded or submit files executed. A>SETDEF [NO DISPLAY] Turns off the system Display mode. ///1SHOW Syntax: SHOW {d:}{[SPACE |LABEL |USERS |DIR |DRIVE]} Explanation: The SHOW command displays the following disk drive information: Access mode and the amount of free disk space Disk label Current user number and Number of files for each user number on the disk Number of free directory entries for the disk Drive characteristics ///2Examples A>SHOW A>SHOW [SPACE] Instructs the system to display access mode and amount of space left on logged-in drives. A>SHOW B: Show access mode for drive B and amount of space left on drive B. A>SHOW B:[LABEL] Displays label information for drive B. A>SHOW [USERS] Displays the current user number and all the users on drive A and the corresponding number of files assigned to them. A>SHOW C:[DIR] Displays the number of free directory entries on drive C. A>SHOW [DRIVE] Displays the drive characteristics of drive A. ///1SID Syntax: SID {pgm-filespec} {,sym-filespec} Explanation: The SID symbolic debugger allows you to monitor and test programs developed for the 8080 microprocessor. SID supports real-time breakpoints, fully monitored execution, symbolic disassembly, assembly, and memory display and fill functions. SID can dynamically load SID utility programs to provide traceback and histogram facilities. ///2Commands Command Meaning As (Assemble) Enter assembly language statements s is the start address Cs{b{,d}} (Call) Call to memory location from SID s is the called address b is the value of the BC register pair d is the value of the DE register pair D{W}{s}{,f} (Display) Display memory in hex and ASCII W is a 16-bit word format s is the start address f is the finish address Epgm-filespec (Load) Load program and symbol table {,sym-filespec} for execution E*sym-filespec (Load) Load a symbol table file Fs,f,d (Fill) Fill memory with constant value s is the start address f is the finish address d is an eight-bit data item G{p}{,a{,b}} (Go) Begin Execution p is a start address a is a temporary breakpoint H (Hex) Displays all symbols with addresses in Hex H.a Displays hex, decimal, and ASCII values of a where a is a symbolic expression Ha,b Computes hex sum and difference of a and b where a and b are symbolic expressions Icommand tail (Input) Input CCP command line L{s}{,f} (List) List 8080 mnemonic instructions s is the start address f is the finish address Ms,h,d (Move) Move Memory Block s is the start address h is the high address of the block d is the destination start address P{p{,c}} (Pass) Pass point set, reset, and display p is a permanent breakpoint address c is initial value of pass counter Rfilespec{,d} (Read) Read Code/Symbols d is an offset to each address S{W}s (Set) Set Memory Values s is address where value is sent W is 16 bit word T{n{,c}} (Trace) Trace Program Execution n is the number of program steps c is the utility entry address. T{W}{n{,c}} (Trace) Trace Without Call W instructs SID not to trace subroutines n is the number of program steps c is the utility entry address U{W}{n{,c}} (Untrace) Monitor Execution without Trace n is the number of program steps c is the utility entry address W instructs SID not to trace subroutines V (Value) Display the value of the next available location in memory (NEXT), the next location after PRTMSG = Y PAGWID = 4F PAGLEN = 17 BACKSPC = N RUBOUT = Y BOOTDRV = A MEMTOP = FF BNKSWT = Y COMBAS = E0 LERROR = Y NUMSEGS = 03 MEMSEG00 = 00,80,00 MEMSEG01 = 00,C0,02 MEMSEG02 = 00,C0,03 MEMSEG03 = 00,C0,04 MEMSEG04 = 00,C0,05 MEMSEG05 = 00,C0,06 MEMSEG06 = 00,C0,07 MEMSEG07 = 00,C0,08 MEMSEG08 = 00,C0,09 MEMSEG09 = 00,C0,0A MEMSEG0A = 00,C0,0B MEMSEG0B = 00,C0,0C MEMSEG0C = 00,C0,0D MEMSEG0D = 00,C0,0E MEMSEG0E = 00,C0,0F MEMSEG0F = 00,C0,10 HASHDRVA = Y HASHDRVB = Y HASHDRVC = Y HASHDRVD = Y HASHDRVE = Y HASHDRVF = Y HASHDRVG = Y HASHDRVH = Y HASHDRVI = Y HASHDRVJ = Y HASHDRVK = Y HASHDRVL = Y HASHDRVM = Y HASHDRVN = Y HASHDRVO = Y HASHDRVP = Y ALTBNKSA = N ALTBNKSB = N ALTBNKSC = N ALTBNKSD = N ALTBNKSE = N ALTBNKSF = N ALTBNKSG = N ALTBNKSH = N ALTBNKSI = N ALTBNKSJ = N ALTBNKSK = N ALTBNKSL = N ALTBNKSM = N ALTBNKSN = N ALTBNKSO = N ALTBNKSP = N NDIRRECA = 01 NDIRRECB = 01 NDIRRECC = 01 NDIRRECD = 01 NDIRRECE = 01 NDIRRECF = 01 NDIRRECG = 01 NDIRRECH = 01 NDIRRECI = 01 NDIRRECJ = 01 NDIRRECK = 01 NDIRRECL = 01 NDIRRECM = 01 NDIRRECN = 01 NDIRRECO = 01 NDIRRECP = 01 NDTARECA = 01 NDTARECB = 01 NDTARECC = 01 NDTARECD = 01 NDTARECE = 01 NDTARECF = 01 NDTARECG = 01 NDTARECH = 01 NDTARECI = 01 NDTARECJ = 01 NDTARECK = 01 NDTARECL = 01 NDTARECM = 01 NDTARECN = 01 NDTARECO = 01 NDTARECP = 01 ODIRDRVA = A ODIRDRVB = A ODIRDRVC = A ODIRDRVD = A ODIRDRVE = A ODIRDRVF = A ODIRDRVG = A ODIRDRVH = A ODIRDRVI = A ODIRDRVJ = A ODIRDRVK = A ODIRDRVL = A ODIRDRVM = A ODIRDRVN = A ODIRDRVO = A ODIRDRVP = A ODTADRVA = A ODTADRVB = A ODTADRVC = A ODTADRVD = A ODTADRVE = A ODTADRVF = A ODTADRVG = A ODTADRVH = A ODTADRVI = A ODTADRVJ = A ODTADRVK = A ODTADRVL = A ODTADRVM = A ODTADRVN = A ODTADRVO = A ODTADRVP = A OVLYDIRA = Y OVLYDIRB = Y OVLYDIRC = Y OVLYDIRD = Y OVLYDIRE = Y OVLYDIRF = Y OVLYDIRG = Y OVLYDIRH = Y OVLYDIRI = Y OVLYDIRJ = Y OVLYDIRK = Y OVLYDIRL = Y OVLYDIRM = Y OVLYDIRN = Y OVLYDIRO = Y OVLYDIRP = Y OVLYDTAA = Y OVLYDTAB = Y OVLYDTAC = Y OVLYDTAD = Y OVLYDTAE = Y OVLYDTAF = Y OVLYDTAG = Y OVLYDTAH = Y OVLYDTAI = Y OVLYDTAJ = Y OVLYDTAK = Y OVLYDTAL = Y OVLYDTAM = Y OVLYDTAN = Y OVLYDTAO = Y OVLYDTAP = Y CRDATAF = N DBLALV = Y  2>:P 2@!:@U! "":ӆ͡GӄӅ<ӂ>Ӄ> ӇͱG.ۀ x !ۀ *"*" :>:@U> *o ~<<_ !~#fo"*o #F:ӆ͡>Ӂ*:@3 }(  }8o<:@U [} xʻ }ӄ|Ӆ:Ӄ>ӂ> 2?i(H:?Ӈͱ(>ۇG 8_(4>02?i(%:?Ӈ &ۇ_ } ͱ(ۇG ɯ<& } ˏ& `ۇ( } =2>ہ( w͡ ͡(>Ӈͱ(ۇG կ2>ɯӆz%ۄ ۅ1( >Ӆ>1ӄ>pӇ>ӆ& ۇw}& ۇ/}  &$ M1&$ &$ *o ##"{2~, ~ :o:! ""*"s 222>2>2xͿ| ~a>2x2~wͿ( ~wa* #<(:f~wa* FN6 6 ~ .` !V( *~  pqf~_( ~!O N#fi{*mֿȿ:?O!~O/ͩq!> !;!:wK:D=2>22ɯ ~v7*qq#p N#fi *B"*s#r#6 " CC Cs:A2i`z n& +c 2*"* "*o~ ###v(:8:jO ! [qs#r! :jO ! ^#VSq*o ~ #>(#~(>MOG#n( !C[q! N#F ! F?2^#V+ɷ*o  y2j!_ ~(k2kOC͗8a2l"m ^#V#N#F:lo& "o@ AO :lO "q8)2>͓ ܽ A~$# w++~'w0#~'w+ GOxGd0d 0 !!!! ! 2{Ͷ2:ͨW:ͨB(0 O= 0 :ͨ88O:ͨG ??OUD (0y xy(DGy<2߽> >$ !> g"::2޽:2ݽ:2ܽ*m>2ѽ x 7R0x >2ѽ7ZxNd8dͶ2xͶ2!н{Oz 8 YW#x 8xͶ2ώ A$w#Y$  :!彾ܐ:ܽ2:ݽ2:޽2>2ѽ:ͨG:x(dNG2ѽ! m :ͨO :ͨ=(Gнo 2 !" *"  !  @ ) !  @ ) !  @ )!~((#### y p#q#s#ro ͏v ʍ !O:2B ͏|>2z͏<2 ͏@,͏z͏|2y2 fÇ| f*u|Ç:yG 8!  )>2 Gy ҳs#r#<GyOx !  N#fiOf”ïfźM  ɺ*"*}"*"*"*"!x :|  1!|G^º>">"!}">">"!E"> $> >$>O#>#>J!!}#>!}!}!^#V#zǺ~##ںO +~#!9b ڗ>2#×:#<ֵ2#* ! ""++"29 Cw*{}<^#Vz!c! >c! Jw*q~69!͐=‡*":*}®: =::<>2*i^#V+ d! K*}@*)): K:) O "!w [O?WGzO:VxGyOGxw q*}}ʴ>2d:#Ϸ>29෯2~2#!   )xð*}*}"*x"xm*^#V* s#r**s#r* :﴾Y4Y̓**~#ng* s#r ^#V랚a##)0"xx! """XC*~<ζ*":! ::9 *"x"*"g* 3:= :Oi :=H:Gi a6:G/O* *W :T=ҍ aʚ~µ6 *:X)!:T>qkֵ!:6>X*{Q:_2{2Ē"͂"X~<µ #cdfg !"()  *N!r)! N! )z<*)"!":X*:w :w#:w*2*}D ̓¡>2ͱԬ߫?~¾¾ʳƳ>w͙=2͜:wÚ~̓ʑpá!6 N w ͧBpͧȸÚgsr͐-͜ě ͤ S)_ ͤ̓~?w͐s-?F͜pN͆p# Þ͐*6!¿?~p*6 >2ͱ ݬ Ԭ߫ ͷw*oq ͋"@6ȸ͚Xͤ͋͗wO~<: g~w#w#6 ##)͋@ *  g~?G++! o#~>T}! 6 **# K"G*~ xr͐-xą@ ˩7(͚Sʀw: :<RHͥ:>~c!o#~E^#V)G#~#~!~ b k##N#F#^#V#~#fo~o2{2g*wޟ ʪҢÞ+}*#}o|g:O*s#r#w!~w/~@w//Hͥ* >=)_g:0"ök*w)*c)-}ͤÀk*s":;:r2͚Μù͚Μ©͚}/_|/* W}_*c" }o|g"c>2{—>2—͇ͱ* «>2͙wBp+ү:w͚AP{ 2W>O2ø}R* ):r͚Μc2ZT͐-ڣ3͗@YsY̓Y׬Yͅ:߫Asү:@ү@ү$͚̓A؜=:<~?¯k î?~?ʾZT͐ڮ*>o"͒"!Þ:Oݠ"Ý}6͚ ~2Asv@NN~v$̓W+vw̚v$̓rrͅ:r߫>2+A@2r!Z2! "ög:2T͐-:ʹ>2<2ڣ!w: >2*6 ݠݣO~<w:*)@ u:G*g` ~!x_<_@*oy<:/G?~##~? 6K@?F6 ##N6 ⬯2p##q:#*~w> 2*p@! ~*"v@*w# ) 6 #̬͙  N#FxT]## #~ ȷ  *4# ' 4!  *~^ ^33G# Pv:dv6  y2@ !״)#w*~"ҫ!Fw䫨ҫ̓ҫ:w̚":>寯2̓*~wć"̀ !~$6 :03i"!~6 * >=)Q!QX@ ˩ > 2 ˩!! q#p#w2wW* _3ҫ-!s:!xQ*:<œ. ʩ.ʩAܙrr##sܙ<}r cN ! ~态O> G~G! ~G~o> _yG~.|°! w:ck[! x?[! ~ʤ͆[͗PPvqO-á=.:<ʰ! Vq##~_@wڴͶ:WMںʛ>úͶ >TJ:!ʷ ͞x!Ǩw4 ϨPWިPܙÂՙÂ*!! ~~#~O~#FsO s#r:(„y==„*!^W*y^#Vx7=2wͼկw#KWK*"J T͞*: ["+SX:ڜq:ʺ!ʵ>2 ܙͤ2 ѧO ̛DM͸}ާ>r""2:2* ::: 29:>:>*ڈ>F6:_/G:ʧ:ڨ|OͤG:_O ̛̛zW{¦|:*}|BKN¦ zyG:!vq:vՙvMڂ?Ͷ >T͓Â! ">Â:G:O:h=27ryy/W!:l=:<>w##~2 4~?ɥ̓¹:<ɥɥüޣAX2rK:w++~=wv4͗O5:2X!"*>o+"v *!b"ݠ": r#~?w#>r# L=J Lv  wȸbܙ?~O ͆ڥ†wŒ~è# # x ͗w ٤ڤ٤ڤw@ ~wb͐Úݞ! x>w~6 :6~#+w#w+ ~;wɯ2KOFq-yl?Np g:ʓ~( ȸˆʀHÈ2xą  ):@ΣO~#w͚ʀô̓b_++V@* )͗Os++r ~Gw# * #~$%+@*9>  #>? ;*~ w-xąH"0 *ĊHEʀ@~›:6¦w͚ ̋ȸÇPY*{zBKNyʺ Nú2: *~w *" ݠ2>ʄ@~k:(s~*9~Ês~Ԭ~ͅ<G:<ޡ2x# W:<­:22G?>Grx~:2Ô##~*$*">2̀2kº ʺ**iҺ@:O ~2~WW:2Ôyʛ?ʔx ʔ |̷ǡÔN:r:/GyOOA +¬ ¢y2:x¹o& :W>OͫE:ڟ?N/*"y2ͦ>2 ݠRXޟDM*w6 # x *ow**ws#r̀*i6#6 *}"j@*|<ď>!8>8> t>nͦv8 ~*own . "  *SmwrX8# ;@E\aÜPÒ/×ï ) L× _o @ > *}D 0000000000000000001R M sC1C!4!~#|~(5 #~#fo~ +6#### @>y$A{CM^#V#zy8#0#!nodev nodev nodev nodev nodev nodev nodev nodev > Y !! ^#VA** $J>| **9(>M*** $> | (*** $> ( | G({.x:A( s.1._> #Wo> g2AG?S [ú x2( :((?:A2( KAYPRO CP/M 3.101b (c) 1985 DRI and DRM $ No CCP$ CCP COM A2üBKAYPRO Winchester Disk Interface 3.100e$ D e  D e  :?>(>25:Q *s   Q G! XRyW~KAYPRO Floppy Disk Controller 3.100e$ PX PX PX ::G:O 毰>2 :Q !f ~62*s {Yvvvv v8>:2f > Q {ɀ/"O"L"O"R"`'"|KAYPRO CRT driver v3.100g$ z++î+++r+KAYPRO Keyboard handler v3.100e$ 4     ,l,a,É,},+KAYPRO Z80-SIO handler v3.100e$ 4 (4(4 ]ð,,ñ,,ô,7,YKAYPRO Parallel Printer v3.100c$  23! YN#F#~_#~pW~# ~(<#~#恻 6~p 0#^#V#N#F##  O>w#O>pw!r #######~ !r =KAYPRO UNUSED MMS Z37 Z37X Z100 EPSON ASSOC FMT8 FMT9 FMT10 FMT11 FMT12 FMT13 FMT14  ,  Q,  1,  q-  -  (-  9-  J-  [-  l-  }-  -  -  -  -  - - - . . @ U'. W8.  I.  XZ. sk.|.  1! |G^ >">"! }">">"!E" > $> >$>O#>#>J!! }#>! }! }!^#V#z ~##ں O +~#! Gy ҳ s#r#<GyOx !  N#fiOf ” ï f M  * "*} "* "* "* "!x  :| O:2B ͏ | >2z͏ < 2 ͏ @,͏ z͏ |2y2 f Ç |  f *u |Ç :yG 8!  )>2 2 ! " *"  !  @ ) !  @ ) !  @ )!~((#### y p#q#s#ro ͏ v ʍ  !  A$w#Y$  : ! ܐ : 2: 2: 2>2 : ͨ G: x(dNG2 ! m : ͨ O : ͨ =(G o> g"::2 :2 :2 *m>2  x 7R0x >2 7ZxNd8dͶ 2 xͶ 2 ! {Oz 8 YW#x 8xͶ 2 2 {Ͷ 2 : ͨ W: ͨ B(0 O= 0 : ͨ 88O: ͨ G ??OU D (0y xy(DGy<2 > >$ !  A~$# w++~'w0#~'w+ GOxGd0d 0 !!!! !  y2j !_ ~(k2k OC͗8a2l "m  ^#V#N#F:l o& "o @ AO :l O "q 8)2>͓ : 8:j O ! [q s#r! :j O ! ^#VSq *o  ~ #>(#~(>MOG#n( !C[q ! N#F ! F ?2^#V+ɷ*o ~v7*q q#p N#fi * B" * s#r#6 "  CC Cs :A2i`z n& +c 2*"* "*o ~ ###v(~!O N#fi{*m :?O!~O/ͩq!> !;!:wK:D=2>22ɯ the largest file read in (MSZE), the current value of the Program counter (PC), and the address of the end of available memory (END) Wfilespec,s,f (Write) Write the contents of a contiguous block of memory to filespec. f is finish address X{f}{r} (Examine) Examine/alter CPU state. f is flag bit C,Z,M,E or I. r is register A,B,D,H,S or P. ///2Examples A>SID CP/M 3 loads SID from drive A into memory. SID displays the # prompt when it is ready to accept commands. A>B:SID SAMPLE.HEX CP/M 3 loads SID and the program file SAMPLE.HEX into memory from drive B. ///2Utilities SID utilities, HIST.UTL and TRACE.UTL are special programs that operate with SID to provide additional debugging facilities. The mechanisms for system initialization, data collection, and data display are described in the CP/M SID User's Guide. The HIST utility creates a histogram (bar graph) showing the relative frequency of execution of code within selected program segments of the test program. The HIST utility allows you to monitor those sections of code that execute most frequently. The TRACE utility obtains a backtrace of the instructions that led to a particular breakpoint address in a program under test. You can collect the addresses of up to 256 instructions between pass points in U or T modes. ///1SUBMIT Syntax: SUBMIT {filespec} {argument} ... {argument} Explanation: The SUBMIT command lets you execute a group (batch) of commands from a SUBmit file (a file with filetype of SUB). ///2Subfile The SUB file can contain the following types of lines: Any valid CP/M 3 command Any valid CP/M 3 command with SUBMIT parameters ($0-$9) Any data input line Any program input line with parameters ($0 to $9) The command line cannot exceed 135 characters. The following lines illustrate the variety of lines which may be entered in a SUB file: DIR DIR *.BAK MAC $1 $$$4 PIP LST:=$1.PRN[T$2 $3 $5] DIR *.ASM PIP SUBMIT A>SUBMIT SUBA A>SUBMIT AA ZZ SZ A>SUBMIT B:START DIR E: ///2PROFILE.SUB Everytime you power up or reset your computer, CP/M 3 looks for a special SUBmit file named PROFILE.SUB to execute. If it does not exist, CP/M 3 resumes normal operation. If the PROFILE.SUB file exists, the system executes the commands in the file. This file is convenient to use if you regularly execute a set of commands before you do your regular session on the computer. ///1TPA Syntax: TPA Explanation: The TPA Command displays the amount of memory available for TPA. The amount of memory is a direct translation of the current BDOS entry page, including any active RSXs. This can be used to determine if RSXs are resident, by comparing the TPA to the value seen immediately after boot. Example: A>TPA 57.25K TPA ///1TR Syntax: TR d:{filespec}=filespec[C|U] Explanation: The TR Command copies one or more files and translates line endings between Unix and CP/M conventions. The option C causes every line feed character to be prefixed with a carriage return, unless already present. The U option removes all carriage returns from the file. Neither source nor destination Ó*"r*r"ÿ<:g:!͐*f}D! ~6 t!rͷ֏O(^ƏƏƏ  :Function = File = !,$"h ! 9"f! ͉:2t™:!=Hgo :O*;*͂:A2=/::0! dگ61#d ڸïp#:w#6 !6 :6 *#!)6.#)͂ O(BDOS > wM  2*7w#6?#7 .,:;[]=<>| !?]45#Ra{i_p# l s s l ls:¬MAGET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM  Ó*"r*r"ÿ<:g:!͐*f}D! ~6 t!rͷ֏O(^ƏƏƏ  :Function = File = !,$"h ! 9"f! ͉:2t™:!=Hgo :O*;*͂:A2=/::0! dگ61#d ڸïp#:w#6 !6 :6 *#!)6.#)͂ O(BDOS > wM  2*7w#6?#7 .,:;[]=<>| !?]45#Ra{i_p# l s s l ls:¬MA Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page relocatable file for execution under MP/M in relocatable segment OR Output .RSP resident system process file for execution under MP/M OS Output .SPR system page relocatable file for execution under MP/M Phhhh Program origin; changes default program origin address to hhhh. Default is 0100H. Q Lists symbols with leading question mark S Search preceding file as a library $Cd Destination of console messages d can be X (console), Y (printer), or Z (zero output). Default is X. $Id Source of intermediate files; d is disk drive A-P. Default is current drive. $Ld Source of library files; d is disk drive A-P. Default is current drive. $Od Destination of of object file; d can be Z or disk drive A-P. Default is to same drive as first file in the LINK-80 command. $Sd Destination of symbol file; d can be Y or Z or disk drive A-P. Default is to same drive as first file in LINK-80 command. ///2Examples A>LINK b:MYFILE[NR] LINK-80 on drive A uses as input MYFILE.REL on drive B and produces the executable machine code file MYFILE.COM on drive B. The [NR] option specifies no symbol table file. A>LINK m1,m2,m3 LINK-80 combines the separately compiled files m1, m2, and m3, resolves their external references, and produces the executable machine code file m1.COM. A>LINK m=m1,m2,m3 LINK-80 combines the separately compiled files m1, m2, and m3 and produces the executable machine code file m.COM. A>LINK MYFILE,FILE5[s] The [s] option tells LINK-80 to search FILE5 as a library. LINK-80 combines MYFILE.REL with the referenced subroutines contained in FILE5.REL on the default drive A and produces MYFILE.COM on drive A. ///1LOCAL Syntax: LOCAL local-dev Explanation: The LOCAL command enables a requester to reassign selected I/O back to local from the network. The LOCAL command updates the requester configuration table. local-dev is the specification of a local device such as LST:, A:,... CON:. Example: A>LOCAL P: ///1LOGIN Syntax: LOGIN {password}{[mstrID]} Explanation: The LOGIN command allows a requester to log in to a specified server. A requester must log in before any resources on the server can be accessed. Once a requester has logged in, it is not necessary to log in again even though the requester might power down and then power up again. A requester can only be logged off a server by an explicit LOGOFF command issued from the requester. password is an optional 8 ASCII-character password; the default password is PASSWORD. [mstrID] is an optional two-digit server processor ID; the default is [00]. Not all servers require log B !  % $ ) 3 - 1 Q 5 ` 9 o = A     !_~2#  2>:P 2@!:@U! "":ӆ͡GӄӅ<ӂ>Ӄ> ӇͱG.ۀ x !ۀ *"*" :>:@U> *o ~<<_ !~#fo"*o #F:ӆ͡>Ӂ*:@3 }(  }8o<:@U [} xʻ }ӄ|Ӆ:Ӄ>ӂ> 2?i(H:?Ӈͱ(>ۇG 8_(4>02?i(%:?Ӈ &ۇ_ } ͱ(ۇG ɯ<& } ˏ& `ۇ( } =2>ہ( w͡ ͡(>Ӈͱ(ۇG կ2>:ӆz%ۄ ۅ1( >Ӆ>1ӄ>pӇ>ӆ& ۇw}& ۇ/}     ^   :R 2:Q ((1  m!ˮˎˆ#ˮ !# *o ##""2"~ą ~ :":"! ""*~"s 222!">2 ">2"U ~º>2"2!"~wU( ~wú*~ #<(:!"ʿ~wú*~ FN6 6 ~ .` !V( *~~  pqÿ~_(  O(G(*o vº*q q pn f *~  *~~G ?ڴ q#p>2"a! "6 5 8Ͷ!8H!!!!!:c 0 *"F#N(((: ˀ˩yq+Oxp>2Ͷ!8h(˩H(ˀˀH ˩>2"*o ##""D 8:<: " > 2! D*"n(#n( 82c @ *"#~! 2c [s R:c : " :" <> (_!"5_~ Ҧ: "¦͞! !æ    { 2"222"s1:"O!O F#N#fi ! :W/G:l O*"# ͼ bC { 7ɯO&  { % 7ɷO*q  >_#> W2"*"N#~/ I(A `2%"5 !"6#6 ":Oyʶ!:%"gx0XDol(ˠ! @t(! 5! .! %- o!g}:c 0|!" 57!"#57~ 0͞!>2"Ͷ!!:%"OH!q!q!X1>  .H! - !> >:"082c >:O滱  CRT  !Y+ w#*A "Z+*D "]+*F "_+>:Y+œ$y" %y[]+i$u$:[+@2q+*]+:[+_W2[+Rͻ":Z+8_#<2Z+*]+P zW"]+K_+B0  V$:Z+ȷ=2Z+*]+P R:[+ :Z+(=2Z+>P=2[+[]+>O2[+*]+O :[+O"[]+<2[+W%!\+y0(=(=(=(=(=(%=(0=(4~w~w~w~w`> y:\+2\+>@2q+*Z+"b+:\+ 2\+!\+y0(=(=(=(=(=(=(!=(0~w~w~w~w ~w*b+| 2d+} 2f+$:\+2\+! M:f+ G( P _:d+ PO2[+{2Z+ [_+"V$ >yxO$A Q A YD$zWD$:\+͐$D$͐$c$!|g!Y+6  yR&Eh'AG2a+6 :a+Bb#Cʼ#y2f+6 y2d+:a+=$*l( s(6 y2g+6y2e+:a+L*D *(> ʻ" "(ʫ*ʰ**# L# #K+d">2Y+:\+ (6*_+P |gT] |gͻ%!P **_+P |g"_+ V$*_+P |g"_+ V$*_+|g!P *x%x|y}>%xzy{>#zW|g &x|y}>&xzy{> x%&xF&x|y}>a&xzy{>#zW|g&x|y}>&xzy{>++ xE&&ͻ":Z+'[]+!P * 0DO |gDMR|g[_+R0#! R|`G}iO@&^%*]+P "PYDM|W]*_+ |gGMR0! R DM*]+ͻ%*_+0|W]!P *:Z+ (*_+P R|g V$*]+K_+B0! B|gK]+ |GM! |GM*_+0|g!P |gͻ%*]+P B|g:[+O !P B**]+:[+_ R|W]*]+ͻ%!P B**_+P B|g"_+"(*ҫ*D*_+/P |W] |g! = DM@&*]+T]:[+O>PO |gͻ%:[+o& *ë*> 2h+>2h+:d+ _:f+ WzdG::{_>8(2j+{_*_+BKP  Y|W]Sk+[)( >2i+:j+)[k+͞)2a+(:h+:a+[k+͐):i+/7:h+:a+͐):i+/$[k+͞) #:h+( :j+/G:i+:i+G:j+[k+e):h+( :j+G:i+:j+/G:i+zWq)zWq)̓) >yx|)A Q A Yͨ)q)ͨ)_)!"|g{ _z W0D 2h+>2h+ [f+ʹ)Sf+2o+[d+ʹ)Sd+2p+W:o+_):f+W:g+>8>2m+:d+_:e+>8>2n+:o+O:p+DM! 8(.):e+:n+_ 0:m+W):g+:m+W 0:n+_):g+:m+W:n+_*M:\+  :Z+0DGP ! * )!P []+:[+OGBK+:\+2\+[]+! (! +xzWy{>+> $+xzy{><++| ɯ2[+2Z+*_+" KEYBD !~~0_W~@G+~悳_##N >yAyQ+ʮ+ְ!wgNO ~ɯ+(y>DCE DTE MODEM xO_ P!+! ,+~~0_W~@G+~悳_##N >yAyQNˑV~ 0=yl,(Nx,N yxy͉,(Ny,N++ >yx+8 xɯLPT  >,(y@@$ R _   $  _   $ U   $      [ ?       (          @  (  @    ?       (          ; @  (   @        @        ; @  P    P    (  ?   (  ?   D  F       $I$I$I$H@ HUUUUR$ D @ @ URI I! $@!I BH D   T] KKͦޟ*w"wͦ"w@  :ßN ɟ N#Fy؟*}|h#ð*ͫ# 6 *q @!"@**#":&2͒:È0:+Òy<_W`iͫDM*w ~bNpwޟDM*we ^#V#~2>â9͆>! "*y³*X*ÿ͂"*g* K!~<:wb##>w#wě> r!~#22Zw*q>ww:c *#*is#r*:!:) :O! *c:Oͫ}@2æ ~á*g:o$* ~K6 ?~wKw**i{#zir+s{O:w:Ғ4~:w?r##rp# ä |g}oì*g  #G ¾1*q:*w***> r 2":O:G2!w* ~zWw+ !z?#~*! * * G! O~2~m͗O~t>2?:2g͝DM*0MD"!*MD$:Oë!N: «G>O: ›ù* ě :ڛn` ~#foͤ2O ̛"}:O*" !s#r#p*kN#F*m^#V#F*:O}|y9*+"*}|yP#9**DM"*ks#r*ms#r#pyox*kw#w*mw#w#w>2'å2*OͶyڲò<* Ͳ:0!::ò2*>*ͫ"4#4#4)7 #  w#*J|^#V#"i##"k##"m###"o#"q##"!s )*s!)*|!6~6 7rror File Exists ? in Filename òò>2a.":2:<:55;:2ɯ22{_zW{_zW )7 CP/M Error On : Disk I/O Invalid Drive Read/Only File Read/Only Disk Password E )"!z<~rs^#V#N#FxN:oʲ̀õ(# Þ ry< <<%zrͷr6r9rMDÌ:o!6!h: ʚnt2 r6 2>rz<*9ʌ^:—~x ):*:ŕŕ>*(+"(w++2+2+ɑpؑ! " >2+2*jx.#NzW::!2W!5=^x^z:m:*;#wO:͂^2¢ů͠Ĕ:!ڽ*(~ݒג5WèՔؑjגM2ͨxΔ*(+w"(j͐ !%"(^-:*$P:<\:W:2xM s:<9>2:*9x~+q’x2:**&~2+o#"&!+6Mœ:W:2x ͺ*(+"(w  :ܓ>2*2:*(:+w"(ͺ:G::+̜2 5*(~o#"(Mš*(~`Uoj*(~#"(Ñ!*~6 s!+6 :+‚xoڊ{2Ó#w:2.+:.2-!%"(2*!—"&!*~4:2-Ԃ:G ͳͨ^2+>2:2*N#G2 2GH)+6 :2,:!- ͐:,!͐+*( ~L#Bxz:*:*(~ʓOr ͐ ͐! O(Ì*(~2**}ʷ!#¶! ""÷:_:*(#wΑxH!—)6 "&:!— x5~y 5 6 y(^͐@O:=7:͐y ͐:I ͐:=e: zz#͐͂:! ͐ G:Ҏ>xʝʝw>ɯw̩z:»!>wɯ:=zxzz::G:=/ͽx:Āy!4 šn!6@G:x: P:<: P n6  t6 ! ^6 t6 u:)<͠^! ; NETWORK DISK OPERATING SYSTEM FOR CP/NET on CP/M Plus v3 ; ; 1982.12.31. exact date unknown ; 2016.05.20. adapted for RSX on CP/M Plus ; Dropped support for remote console/list, due to BIOS intercept issues. ; BIOS intercept is a problem because of the transient nature of RSXs. ; Could add back support for "well-behaved" LIST OUTPUT users, ; provided BIOS intercept is not required. ; ;TITLE NETWORK DISK OPERATING SYSTEM FOR CP/NET SLAVE maclib z80 extrn NTWKIN, NTWKST, CNFTBL, SNDMSG, RCVMSG, NTWKBT, CFGTBL ; ; ; EQUATIONS OF DATA ; 000A = LF EQU 0AH ;LINE FEED 000D = CR EQU 0DH ;CARRIAGE RETURN 001A = EOF EQU 1AH ;CTRL-Z IS END OF FILE 00FF = LEOF EQU 0ffh ;-1 is logical end of file ; 0000 = TOP equ 0000h 0004 = CDISK equ 0004h 0005 = BDOS equ 0005h 0080 = SYSDMA equ 0080h 0100 = TPA equ 0100h 0080 = SCTLNG equ 128 ;ONE SECTOR LENGTH ; ; EQUATIONS OF DOS FUNCTION ; 0003 = CCNDIN EQU 3 ;CONSOLE INPUT WITH DEVICE CODE 0004 = CCNDOT EQU 4 ;CONSOLE OUTPUT WITH DEVICE CODE 0009 = CBUFPR EQU 9 ;BUFFER PRINT 000A = CRDBUF EQU 10 ;READ BUFFER 000B = CCONST EQU 11 ;GET CONSOLE STATUS 000C = CGETVR EQU 12 ;GET VERSION NUMBER 000D = CRSDSK EQU 13 ;RESET DISK 000F = COPEN EQU 15 ;OPEN FILE 0010 = CCLOSE EQU 16 ;CLOSE FILE 0011 = CSRFST EQU 17 ;SEARCH FIRST 0012 = CSRNXT EQU 18 ;SEARCH NEXT DIRECTORY 0014 = CREAD EQU 20 ;READ SEQ 0015 = CWRITE EQU 21 ;WRITE SEQ 001A = CSTDMA EQU 26 ;SET DMA ADDRESS 001B = CGTALL EQU 27 ;get alloc vector addr 001F = CGTDPB EQU 31 ;get DPB addr 0020 = CSTUSC EQU 32 ;SET USER CODE 0021 = CRREAD EQU 33 ;READ SEQ 0022 = CRWRIT EQU 34 ;WRITE SEQ 0025 = CRSDSN EQU 37 ;RESET DISK BY DISK VERCTOR 002E = CFRSP equ 46 ; get disk free space 0031 = scbf equ 49 ; get/set SCB 0032 = CBIOS equ 50 ; direct BIOS call 003B = COVLY equ 59 ; load overlay 003C = CRSX equ 60 ; call RSX function 006A = CDEFPW EQU 106 ;set default password 0070 = CLSBLK equ 112 ; List Block - does not fit in table... 0032 = CBMAX EQU 50 ;MAX OF BDOS FUNCTION - CXMIN.. collapsed here 0062 = CXMIN EQU 98 ;extended bdos functions base - collapse into CBMAX ; 0040 = CNMIN EQU 64 ;MIN OF NDOS FUNCTION 0040 = CLOGIN EQU 64 ;LOGIN 0041 = CLOGOF EQU 65 ;LOGOFF 0048 = CNMAX EQU 72 ;MAX OF NDOS FUNCTION ; ; SLAVE CONFIGRATION TABLE ; ; -1 NETWORK STATUS ; 0 SLAVE PROCESSOR ID ; 1-32 A - P DISK DEVICE CODE ; 33-34 CONSOLE DEVICE ; 35-36 LIST DEVICE ; 37 LIST BUFFER COUNTER ; 38-42 MESSAGE HEADER FOR LIST OUT ; 43 LISTER DEVICE NUMBER ; 44-171 LIST OUT DATA BUFFER ; ; EACH DEVICE DATA USED 2 BYTES ; IN 1-36 ; 1B:BIT 7 H ON NETWORK ; BIT 6 H SET UP IN DISK ; BIT 0-3 DEVICE NUMBER IN MASTER ; 2B:MASTER ID ; ; BIAS TO DATA IN CONFIGRATION TABLE ; 0001 = BSRID equ 1 ;client ID 0002 = BSDSKS equ 2 ;first byte in disk table 0021 = BSDSKE equ 33 ;last byte in disk table 0022 = BSCONS EQU 34 ;BIAS TO CONSOLE DATA 0024 = BSLIST EQU 36 ;BIAS TO LISTER DATA 0021 = FCBRR0 equ 33 ; offset of RR0 field in FCB (not FCB in MSG) 009C = scbase equ 09ch ; base address of SCB within page 0000 org 0 ; RSX Prefix 0000 0000000000serial: db 0,0,0,0,0,0 0006 C3D401 start: jmp COLDST 0009 C30000 next: jmp 0 000C 0000 prev: dw 0 000E 00 remove: db 0 ; 0ffh for remove nonbank: 000F 00 db 0 0010 4E444F5333rsxnam: db 'NDOS3 ' 0018 000000 loader: db 0,0,0 001B 434F505952 db 'COPYRIGHT (C) 1980-82, DIGITAL RESEARCH ' 0043 0000000000 db 0,0,0,0,0,0 0049 0D0A4E444FNDERRM: db CR,LF,'NDOS Err $' 0055 2C2046756ENDERR2: db ', Func $' 005D 0000 BDOSE: dw 0 005F 00 CURSID: db 0 0060 0000 scbadr: dw 0 0062 00 MSGTOP: db 0 0063 00 Min. Example: A>LOGIN mypasswd[02] ///1LOGOFF Syntax: LOGOFF {[mstrID]} Explanation: The LOGOFF command allows a requester to log off from a specified server. Once a requester has logged off, the server cannot be accessed again until you issue a LOGIN command. [mstrID] is an optional two-digit server processor ID; the default is [00]. Example: A>LOGOFF [02] ///1mac Syntax: MAC filename {$options} Explanation: MAC, the CP/M 3 macro assembler, reads assembly language statements from a file of type .ASM, assembles the statements, and produces three output files with the input filename and filetypes of .HEX, .PRN, and .SYM. Filename.HEX contains INTEL hexadecimal format object code. Filename.PRN contains an annotated source listing that you can print or examine at the console. Filename.SYM contains a sorted list of symbols defined in the program. ///2Examples A>MAC SAMPLE A>MAC SAMPLE $PB AA HB SX ///2options Use options to direct the input and output of MAC. Use a letter with the option to indicate the source and destination drives, and console, printer, or zero output. Valid drive names are A thru O. X, P and Z specify console, printer, and zero output, respectively. Assembly Options That Direct Input/Output A source drive for .ASM file (A-O) H destination drive for .HEX file (A-O, Z) L source drive for macrolibrary .LIB files called by the MACLIB statement. P destination drive for .PRN file (A-O, X, P, Z) S destination drive for .SYM file Assembly Options That Modify Contents Of Output File +L lists input lines read from macrollibrary .LIB files -L suppresses listing (default) +M lists all macro lines as they are processed during assembly -M suppresses all macro lines as they are read during assembly *M lists only hex generated by macro expansions +Q lists all LOCAL symbols in the symbol list -Q suppresses all LOCAL symbols in the symbol list (default) +S appends symbol file to print file -S suppresses creation of symbol file +1 produces a pass 1 listing for macro debugging in .PRN file -1 suppress listing on pass 1 (default) ///1MODE Syntax: MODE {d:{args}} Explanation: The MODE Command allows showing/configuring of the BIOS operating parameters on a disk drive. args is a comma-separate list of arguments. Valid arguments are: DS or SS = double or single sided DT, ST or HT = double (96 tpi), single (48 tpi), or half track half track is 48 tpi media in a 96 tpi drive. DD or SD = double or single density S6, S30, etc. = step rate in milliseconds MMS, Z37, Z37X etc. (media formats); the X implies extended format. If no drive (or arguments) is specified, a brief help is shown. Example: A>MODE C: MODE v3.104 PRESENT Configuration is: Drive - C: (33) 5.25 inch floppy Controller - KAYPRO Floppy Disk Controller 3.100d Recording Density - Double Sides - 2 Tracks per Inch - 48 Step Rate - 6 milliseconds Format Type - KAYPRO ///1NETSTAT Syntax: NETSTAT Explanation: The NETSTAT command is a terse version of CPNETSTS. It only shows networked devices. Example: A>NETSTAT CP/NET Status ============= Requester ID = 02H Network Status Byte = 10H Device status: Drive P: = Drive F: on Network Server ID = 00H ///1NETWORK Syntax: NETWORK local-dev=server-dev{[srvrID]} Explanation: The NETWORK command enables a requester to assign selected I/O to the network. The NETWORK command updates the requester Configuration table. local-dev is the specification of a local device such as A:, B: ... P:, CON: or LST:. server-dev is the specification of a server device such as A:, B: ... P: in the case of a disk device, or 0, 1 ... 15 in the case of CON: or LST:. A missing server-dev defaults to 0 in the case of CON: or LST:. [srvrID] is an optional two-digit hexadecimal server processor ID. The default is [00]. Example: A>NETWORK P:=F: ///1NTPDATE Syntax: NTPDATE {server} Explanation: The NTPDATE Command sets the local time to that of the specified server. Default server is 00. Server ID is specified in hexadecimal. Example: A>NTPDATE 2 Time was set to: 04/16/16 18:34:12 ///1PATCH Syntax: PATCH filename{.typ} {n} Explanation: The PATCH command displays or installs patch number n to the CP/M 3 system or command files. The patch number n must be between 1 and 32 inclusive. Example: A>PATCH SHOW 2 Patches the SHOW.COM system file with patch number 2. ///1PIP (copy) Syntax: DESTINATION SOURCE PIP d:{Gn} | filespec{[Gn]} = filespec{[o]},... | d:{[o]} Explanation: The file copy program PIP copies files, combines files, and transfers files between disks, printers, consoles, or other devices attached to your computer. The first filespec is the destination. The second filespec is the source. Use two or more source filespecs separated by commas to combine two or more files into one file. [o] is any combination of the available options. The [Gn] option in the destination filespec tells PIP to copy your file to that user number. PIP with no command tail displays an * prompt and awaits your series of commands, entered and processed one line at a time. The source or destination can be any CP/M 3 logical device. ///2Examples COPY A FILE FROM ONE DISK TO ANOTHER A>PIP b:=a:draft.txt A>PIP b:draft.txt = a: B3>PIP myfile.dat=A:[G9] A9>PIP B:[G3]=myfile.dat COPY A FILE AND RENAME IT A5>PIP newdraft.txt=oldraft.txt C8>PIP b:newdraft.txt=a:oldraft.txt COPY MULTIPLE FILES A>PIP b:=draft.* A>PIP b:=*.* B>PIP b:=c:.*.* C>PIP b:=*.txt[g5] C>PIP a:=*.com[wr] B>PIP a:[g3]=c:*.* COMBINE MULTIPLE FILES A>PIP b:new.dat=file1.dat,file2.dat COPY, RENAME AND PLACE IN USER 1 A>pip newdraft.txt[g1]=oldraft.txt COPY, RENAME AND GET FROM USER 1 A>PIP newdraft.txt=oldraft.txt[g1] COPY TO/FROM LOGICAL DEVICES A>PIP b:funfile.sue=con: A>PIP lst:=con: A>PIP lst:=b:draft.txt[t8] A>PIP prn:=b:draft.txt ///2options PIP OPTIONS A Archive. Copy only files that have been changed since the last copy. C Confirm. PIP prompts for confirmation before each file copy. Dn Delete any characters past column n. E Echo transfer to console. F Filter form-feeds from source data. Gn Get from or go to user n. H Test for valid Hex format. I Ignore :00 Hex data records and test for valid Hex format. K Kill display of filespecs on console. L Translate upper case to lower case. N Number output lines O Object file transfer, ^Z ignored. Pn Set page length to n. (default n=60) Qs^Z Quit copying from source at string s. R Read files that have been set to SYStem. Ss^Z Start copying from the source at the string s. Tn Expand tabs to n spaces. U Translate lower case to upper case. V Verify that data has been written correctly. W Write over Read Only files without console query. Z Zero the parity bit. All options except C,G,K,O,R,V and W force an ASCII file transfer, character by character, terminated by a ^Z. ///1PUT Syntax: PUT CONSOLE {OUTPUT TO} FILE filespec {option} | CONSOLE PUT PRINTER {OUTPUT TO} FILE filespec {option} | PRINTER PUT CONSOLE {OUTPUT TO} CONSOLE PUT PRINTER {OUTPUT TO} PRINTER Explanation: PUT puts console or printer output to a file for the next command entered at the console, until the program terminates. Then console output reverts to the console. Printer output is directed to a file until the program terminates. Then printer output is put back to the printer. PUT with the SYSTEM option directs all subsequent console/printer output to the specified file. This option terminates when you enter the PUT CONSOLE or PUT PRINTER command. ///2Options [ {ECHO | NO ECHO} {FILTER | NO FILTER} | {SYSTEM} ] ECHO specifies that output is echoed to the console. This is the default option when you direct console output to a file. NO ECHO specifies that file output is not echoed to the console. NO ECHO is the default for the PUT PRINTER command. FILTER specifies filtering of control characters, which means that control characters are translated to printable characters. For example, an ESCape character is translated to ^[. NO FILTER means that PUT does not translate control characters. This is the default option. SYSTEM specifies that system output as well as program output is written to the file specified by filespec. Output is written to the file until a subsequent PUT CONSOLE command redirects console output back to the console. ///2Examples A>PUT CONSOLE OUTPUT TO FILE XOUT [ECHO] Directs console output to file XOUT with the output echoed to the console. A>PUT PRINTER OUTPUT TO FILE XOUT A>MYPROG Directs the printer output of program MYPROG to file XOUT. The output is not echoed to the printer. A>PUT PRINTER OUTPUT TO FILE XOUT2 [ECHO,SYSTEM] Directs all printer output to file XOUT2 as well as to the printer (with ECHO option), and the PUT is in effect until you enter a PUT PRINTER OUTPUT TO PRINTER command. A>PUT CONSOLE OUTPUT TO CONSOLE Directs console output back to the console. A>PUT PRINTER OUTPUT TO PRINTER Directs printer output back to the printer. ///1RENAME Syntax: RENAME {new-filespec=old-filespec} Explanation: RENAME lets you change the name of a file in the directory of a disk. To change several filenames in one command use the * or ? wildcards in the file specifications. The RENAME command can be abbreviated REN. REN prompts you for input. ///2Examples A>RENAME NEWFILE.BAS=OLDFILE.BAS The file OLDFILE.BAS changes to NEWFILE.BAS on drive A. A>RENAME The system prompts for the filespecs: Enter New Name:X.PRN Enter Old Name:Y.PRN Y .PRN=X .PRN A> File X.PRN is renamed to Y.PRN on drive A. B>REN A:PRINTS.NEW = PRINCE.NEW The file PRINCE.NEW on drive A changes to PRINTS.NEW on drive A. A>RENAME S*.TEX=A*.TEX The above command renames all the files matching A*.TEX to files with filenames S*.TEX. A>REN B:NEWLIST=B:OLDLIST The file OLDLIST changes to NEWLIST on drive B. Since the second drive specifier, B: is implied by the first one, it is unnecessary in this example. The command line above has the same effect as the following: A>REN B:NEWLIST=OLDLIST or A>REN NEWLIST=B:OLDLIST ///1RMAC Syntax: RMAC filespec {$Rd | $Sd | $Pd} Explanation: RMAC, a relocatable macro assembler, assembles .ASM files of into .REL files that you can link to create .COM files. ///2options RMAC options specify the destination of the output files. Replace d with the destination drive letter for the output files. Option d=output option R- drive for REL file (A-O, Z) S- drive for SYM file (A-O, X, P, Z) P- drive for PRN file (A-O, X, P, Z) A-O specifies drive A-O. X means output to the console. P means output to the printer. Z means zero output. ///2Example A>RMAC TEST $PX SB RB Assembles the file TEST.ASM from drive A, sends the listing file (TEST.PRN) to the console, puts the symbol file (TEST.SYM) on drive B and puts the relocatable object file (TEST.REL) on drive B. ///1RSXRM Syntax: RSXRM name Explanation: The RSXRM Command instructs a cooperating RSX to schedule itself for removal. The target RSX must intercept and understand BDOS function 60 with an RSX PB FUNC of 113 and PARAMETER1 pointing to an 8-character blank-padded string representing the name of the RSX to remove. If an RSX is loaded multiple times, only the first instance will remove itself. Example: A>RSXRM NDOS3 ///1SAVE Syntax: SAVE Explanation: SAVE copies the contents of memory to a file. To use SAVE, first issue the SAVE command, then run your program which reads a file into memory. Your program exits to the SAVE utility which prompts you for a filespec to which it copies the contents of memory, and the beginning and ending address of the memory to be SAVEd. ///2Example A>SAVE Activates the SAVE utility. Now enter the name of the program which loads a file into memory. A>SID dump.com Next, execute the program. #g0 When the program exits, SAVE intercepts the return to the system and prompts the user for the filespec and the bounds of memory to be SAVEd. SAVE Ver 3.0 Enter file (type RETURN to exit):dump2.com If file DUMP2.COM exists already, the system asks: Delete dump2.com? Y Then the system asks for the bounds of memory to be saved: Beginning hex address: 100 Ending hex address: 400 The contents of memory from 100H (Hexadecimal) to 400H is copied to file DUMP2.COM. ///1SET Syntax: SET [options] SET d: [options] SET filespec [options] Explanation: SET initiates password protection and time stamping of files. It also sets the file and drive attributes Read-Write, Read-Only, DIR and SYS. It lets you label a disk and password protect the label. To enable time stamping of files, you must first run INITDIR to format the disk directory. ///2Label Syntax: SET {d:} [NAME=labelname.typ] SET [PASSWORD=password] SET [PASSWORD= ///3Examples A>SET [NAME=DISK100] Labels the disk on the default drive as DISK100. A>SET [PASSWORD=SECRET] Assigns SECRET to the disk label. A>SET [PASSWORD= Nullifies the existing password. ///2Passwords SET [PROTECT=ON] SET [PROTECT=OFF] SET filespec [PASSWORD=password] SET filespec [PROTECT=READ] SET filespec [PROTECT=WRITE] SET filespec [PROTECT=DELETE] SET filespec [PROTECT=NONE] SET filespec [attribute-options] ///3Modes Password Protection Modes Mode Protection READ The password is required for reading, copying writing, deleting or renaming the file. WRITE The password is required for writing, deleting or renaming the file. You do not need a password to read the file. DELETE The password is only required for deleting or renaming the file. You do not need a password to read or modify the file. NONE No password exists for the file. If a password password exists, this modifier can be used to delete the password. ///2Attributes RO sets the file attribute to Read-Only. RW sets the file attribute to Read-Write. SYS sets the file attribute to SYS. DIR sets the file attribute to DIR. ARCHIVE=OFF means that the file has not been backed up (archived). ARCHIVE=ON means that the file has been backed up (archived). The Archive attribute can be turned on by SET or by PIP when copying a group of files with the PIP [A] opSGID: db 0 0064 00 db 0 ; We assume network hw/sw sets this. 0065 00 MSGFUN: db 0 0066 00 MSGSIZ: db 0 0067 MSGDAT: ds 256 0167 C7C7C7C7C7 db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h 016D C7C7C7C7C7 db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h 0173 C7C7C7C7C7 db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h 0179 C7C7C7C7C7 db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h 017F C7C7C7C7C7 db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h 0185 C7C7C7C7C7 db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h 018B C7C7C7C7C7 db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h 0191 C7C7C7C7C7 db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h 0197 C7C7C7C7C7 db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h 019D C7C7C7C7C7 db 0c7h,0c7h,0c7h,0c7h,0c7h,0c7h 01A3 STACK: ds 0 01A3 0000 USTACK: dw 0 01A5 00 FUNCOD: db 0 01A6 0000 PARAMT: dw 0 01A8 00 RETCOD: db 0 01A9 0000 MCRPNT: dw 0 01AB 00 LSTUNT: db 0 01AC 00 F5SETF: db 0 01AD 00 FNTMPF: db 0 01AE 0000 ORGBIO: dw 0 01B0 000024 HEXMSG: db 0,0,'$' 01B3 496E697420CLDERR: db 'Init err$' COLDSE: ; BC and DE are pushed... 01BC 11B301 lxi d,CLDERR 01BF 0E09 mvi c,CBUFPR 01C1 CD0900 call next 01C4 210900 lxi h,next 01C7 220700 shld start+1 ; only until remove takes place... 01CA 3EFF mvi a,0ffh 01CC 320E00 sta remove 01CF C1 pop b 01D0 D1 pop d 01D1 C30900 jmp next ; pass to BDOS and hope for the best... ; Not a true cold start - we are in context of a valid BDOS call... COLDST: 01D4 D5 push d 01D5 C5 push b 01D6 CD0000 call NTWKIN 01D9 B7 ora a 01DA C2BC01 jnz COLDSE 01DD 216502 lxi h,NDOSE 01E0 220700 shld start+1 01E3 AF xra a ; 01E4 320E00 sta remove ; is the required? 01E7 216700 lxi h,MSGDAT 01EA 22A901 shld MCRPNT ; Apparently, it is passe to use BDOS calls for certain things... 01ED 110502 lxi d,scbadd 01F0 0E31 mvi c,scbf 01F2 CD0900 call next 01F5 226000 shld scbadr 01F8 114402 lxi d,CSTUP 01FB 0E09 mvi c,CBUFPR 01FD CD0900 call next 0200 C1 pop b 0201 D1 pop d 0202 C30900 jmp next 0205 3A00 scbadd: db 03ah, 0 0207 2A6000 BDERMD: lhld scbadr 020A 2EE7 mvi l,scbase+4bh 020C 7E mov a,m 020D C9 ret 020E 2A6000 SYSMSC: lhld scbadr 0211 2EE6 mvi l,scbase+4ah 0213 7E mov a,m 0214 C9 ret 0215 2A6000 CURUSR: lhld scbadr 0218 2EE0 mvi l,scbase+44h 021A 7E mov a,m 021B C9 ret ; Some sneaky programs, like ERASE.COM, use the "saved search address" from the SCB. ; so we must put the address there if the BDOS does not (i.e. networked drive). 021C 2AA601 SETSRA: lhld PARAMT 021F EB xchg 0220 2A6000 lhld scbadr 0223 2EE3 mvi l,scbase+47h 0225 73 mov m,e 0226 23 inx h 0227 72 mov m,d 0228 C9 ret 0229 2A6000 SETDSK: lhld scbadr 022C 2EDA mvi l,scbase+3eh 022E 3AA601 lda PARAMT 0231 77 mov m,a 0232 C9 ret 0233 2A6000 CURDSK: lhld scbadr 0236 2EDA mvi l,scbase+3eh 0238 7E mov a,m 0239 C9 ret 023A 2A6000 DMAADD: lhld scbadr 023D 2ED8 mvi l,scbase+3ch 023F 7E mov a,m 0240 23 inx h 0241 66 mov h,m 0242 6F mov l,a 0243 C9 ret 0244 4E444F5333CSTUP: DB 'NDOS3 Started.',CR,LF,'$' 0255 4E444F5333CSTDN: DB 'NDOS3 Ending.',CR,LF,'$' ;wbmsg: DB 'NDOS3 Warm-boot.',CR,LF,'$' NDOSE: 0265 79 mov a,c ; must save REAL function code! 0266 32A501 sta FUNCOD 0269 326500 sta MSGFUN 026C B7 ora a 026D CAE009 jz WARMST 0270 FE3B cpi COVLY 0272 CAE009 jz LDOVLY ; LOAD OVERLAY (RSX SCRUB) - indication of warm boot 0275 FE3C cpi CRSX 0277 CAEA09 jz CALRSX ; used to unload CP/Net 027A FE32 cpi CBIOS 027C CA0900 jz next ; DIRECT BIOS CALL - might need to trap for LIST OUT 027F 21C903 lxi h,FUNTBS NDOSE1: 0282 79 mov a,c 0283 96 sub m 0284 DA0900 jc next 0287 23 inx h 0288 BE cmp m 0289 23 inx h 028A DA9702 jc NDOSE2 028D 23 inx h 028E 23 inx h 028F 7E mov a,m 0290 B7 ora a 0291 C28202 jnz NDOSE1 0294 C30900 jmp next NDOSE2: sspd USTACK 0297+ED73 DB 0EDH,73H 0299+A301 DW USTACK 029B 31A301 lxi sp,STACK 029E 4F mov c,a ; modified func code! 029F 7E mov a,m 02A0 23 inx h 02A1 66 mov h,m 02A2 6F mov l,a ; HL = func table 02A3 E5 push h 02A4 EB xchg 02A5 22A601 shld PARAMT 02A8 CD3A02 call DMAADD 02AB 22B809 shld DMAADR ; cache DMA address for this call... 02AE 216600 lxi h,MSGSIZ 02B1 3600 mvi m,0 ; assume 1-byte payload 02B3 23 inx h 02B4 22A901 shld MCRPNT ; MSGDAT 02B7 AF xra a 02B8 47 mov b,a 02B9 57 mov d,a 02BA E1 pop h ; specific func table in HL 02BB 09 dad b 02BC 5E mov e,m ; don't need HL anymore 02BD 93 sub e ; assumes A=0 02BE CA2604 jz tnextp ; code 0 = not handled by CP/Net NDOSE4: 02C1 210D04 lxi h,NDENDR 02C4 E5 push h 02C5 213003 lxi h,FUNTB2 02C8 19 dad d 02C9 E5 push h NDOSE5: 02CA C1 pop b 02CB 0A ldax b 02CC 57 mov d,a 02CD E67F ani 07fh ; strip off EOP bit 02CF 5F mov e,a 02D0 7A mov a,d 02D1 1600 mvi d,0 02D3 21E602 lxi h,FUNTB3 02D6 19 dad d 02D7 5E mov e,m 02D8 23 inx h 02D9 56 mov d,m 02DA 03 inx b 02DB 17 ral 02DC DAE402 jc NDOSE6 02DF C5 push b 02E0 21CA02 lxi h,NDOSE5 02E3 E5 push h NDOSE6: 02E4 EB xchg 02E5 E9 pchl FUNTB3: 02E6 0000 dw 0 ; 0 000h 080h - never called 02E8 D703 dw SNDHDR ; 2 002h 082h 02EA 1904 dw RCVPAR ; 4 004h 084h 02EC 6704 dw SNDFCB ; 6 006h 086h 02EE 6D04 dw CKSFCB ; 8 008h 088h 02F0 E904 dw RENTMP ; 10 00ah 08ah 02F2 FF04 dw WTDTC2 ; 12 00ch 08ch 02F4 0405 dw WTDTC8 ; 14 00eh 08eh 02F6 0905 dw WTDTCP ; 16 010h 090h 02F8 1E05 dw CKSTDK ; 18 012h 092h 02FA EE05 dw BCSTFN ; 20 014h 094h 02FC 1D06 dw BCSTVC ; 22 016h 096h 02FE 3707 d 3 call xmove lxi h,0 lxi d,0 lxi b,64 jmp move ?timot: ; (B)=I.D. (C)=count, (DE)=routine address push d to1: mvi e,numtic lxi h,tictbl di to0: mov a,m cpi true jrz to2 cmp b jrz to2 inx h inx h inx h inx h dcr e jrnz to0 ei mov a,c ;don't wait if all it wants is to clear a possible ora a ;existing entry, since none exists for that module. jrnz to1 ;-- maybe we should "ei hlt" and then jump -- pop d ret to2: pop d mov m,b inx h mov m,c inx h mov m,e inx h mov m,d ei ret noccp: lxi d,ccp$msg errx: mvi c,9 call bdose di ! hlt gett: inr c ;test for "FF" jz sett ;FF=set time ti0: lxi d,rtcsts+(numrtc shl 8) lxi h,time lxi b,rtcadr+(rtcsec shl 8) ti1: outp b ;select reg inr b in rtcdta mov m,a inx h outp e ;select status reg in rtcdta ora a jrnz ti0 dcr d jrnz ti1 lda timemon ;if last accessed month is greater lxi h,lstmnth ;than current month, the year must be cmp m ;changed. cc setyear$1 ;assumes 1 year elapsed lda timesec sta @sec lda timemin sta @min lda timehrs sta @hour mvi a,28 sta mondays+1 ;set February=28 lda timeyrs call bcdbin mov b,a lda timecnt sui 19h mov a,b jrz ti1@0 adi 100 ;adjust for century ti1@0: sui 78 ;years since 1978 (base year) mov b,a ; inr a ;adjustment for leap year calc. mov c,a ; srlr c ; srlr c ;divide by 4 = number of leap years (exclusive) ani 11b cpi 11b ;is this year a leap year? jrnz ti2 mvi a,29 sta mondays+1 ;set february=29 ti2: lxi h,0 lxi d,365 ti3: dad d ;find number of days since 1978 djnz ti3 dad b ;(B=0) add in 1 day for each leap year lda timedat call bcdbin mov c,a mvi b,0 dad b ;add in days of this month lda timemon call bcdbin dcr a ;if January, nothing left to add. jrz ti4 mov b,a lxi d,mondays ;add in days of each month upto this. ti5: ldax d inx d add l mov l,a mvi a,0 adc h mov h,a djnz ti5 ti4: shld @date lda @sec ret sett: lda @hour sta timehrs lda @min sta timemin lda @sec sta timesec lhld @date lxi d,365 mvi a,28 sta mondays+1 ;set february=28 mvi b,0 ;start counting years since 1978 ti6: mov a,b ; check for leap year ani 11b ;every 4 years, xri 10b ;starting with 1980 jrnz ti7 stc ;one extra day for leap years ti7: dsbc d ;does this year fit in @date? inr b ;count a year. jrnc ti6 ;yes, keep taking out more days (by years) mov a,b ;is this year a leap year? ani 11b xri 10b jrnz ti8 mvi a,29 sta mondays+1 ;February=29 stc ti8: dadc d ;normalize @date (we subtracted one too many) dcr b mov a,b adi 78 ;adjust year to 1900 mvi b,19 ;century cpi 100 jrc ti8@0 inr b sui 100 ti8@0: call binbcd sta timeyrs mov a,b call binbcd sta timecnt xchg ;remainder into DE mvi b,1 ;start taking out months. lxi h,mondays ti9: mov a,e sub m mov c,a mov a,d sbi 0 jrc ti10 mov e,c mov d,a inx h inr b mov a,b cpi 13 jrc ti9 ti10: mov a,b call binbcd sta timemon sta lstmnth ;also set last accessed month mov a,e ;left-over must be date of month call binbcd sta timedat ; set day-of-week using Zeller's congruence: lda timeyrs ;E=([2.6m-.2]+K+D+[D/4]+[C/4]-2C) mod 7 call bcdbin ;0=sunday mov d,a lda timemon call bcdbin mov b,d sui 2 jrz ti11 jrnc ti12 ti11: adi 12 dcr b ti12: mov c,a add a add c ;*3 add a add a ;*12 add c ;*13 dcr a mvi c,0 ti13: inr c sui 5 jrnc ti13 dcr c lda timedat push b call bcdbin pop b add c ;[2.6m-.2]+K add b ;+D srlr b srlr b ; [D/4] add b ;+[D/4] mov c,a lda timecnt ;century call bcdbin mov b,a slar b ; 2*C srlr a ;; srlr a ; [C/4] add c ;+[C/4] sub b ;-2*C mov c,a jp ti14 neg ti14: mvi b,0 ti15: inr b sui 7 jrz ti16 jrnc ti15 bit 7,c jrnz ti16 dcr b ti16: mov a,b add a add b ;*3 add a add b ;*7 bit 7,c jrz ti17 neg ti17: mov b,a mov a,c sub b inr a sta timeday mvi a,clrcnt ; out rtcadr ; mvi a,00000011b ;reset fractional seconds out rtcdta ;we now have one second to set time mvi d,numrtc lxi h,time lxi b,rtcadr+(rtcsec shl 8) ti18: outp b ;select reg inr b mov a,m out rtcdta inx h dcr d jrnz ti18 ret setyear$1: mov m,a ;set last-month dcx h dcx h mov a,m adi 1 daa mov m,a jrnc sy0 inx h mov a,m adi 1 daa mov m,a dcx h sy0: mvi d,3 ;3 registers to update lxi b,rtcadr+(rtcyrs shl 8) jr ti18 bcdbin: mov b,a ani 00001111b mov c,a mov a,b ani 11110000b rrc mov b,a rrc rrc add b add c ret binbcd: sui 100 jrnc binbcd adi 100 mvi c,0 bb0: sui 10 inr c jrnc bb0 adi 10 dcr c slar c slar c slar c slar c ora c ret mondays: db 31,28,31,30,31,30,31,31,30,31,30,31 time: timesec: db 0 timemin: db 0 timehrs: db 0 timeday: db 0 timedat: db 0 timemon: db 0 db 0 ;thousandths of seconds, 4 bits only timeyrs: db 0 timecnt: db 0 lstmnth: db 0 numrtc equ $-time getdrv: lxi h,@dtbl ! ret @dtbl: dw dnull,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dnull: dw 0,0,0,0,0,0,0,0,0,@dircb,@dtacb,0 db 0 seldsk: mov a,c ! sta @adrv ; save drive select code lxi h,@lptbl mvi b,0 ! dad b ; create index from drive code mov a,m cpi 255 jrz selerr sta @pdrv mov c,a mov b,e ;save login flag thru "search" routine call search jrc selerr sta @rdrv shld curmdl push b ;save login bit lxi d,14 dad d ;point to dphtbl mov e,m ;DE=dphtbl inx h mov d,m inx h mov c,m ;BC=modtbl inx h mov b,m lda @rdrv add a add a add a ;*8 mov l,a mvi h,0 dad b ;select mode bytes shld @cmode ;set current mode pointer pop b ;get login bit back. bit 0,b ;test for initial select. jrnz notlgi xchg ;DE=modes mov c,a mvi b,0 dad b ;+*8 dad b ;+*16 dad b ;+*24 lda @rdrv mov c,a dad b ;+*1 = +*25 shld @dph call setup$dph jrc selerr xra a sta @rcnfg mvi a,3 call calmod ;call module's "login" routine. ora a ;see if an error occured. jrnz selerr lda @rcnfg ora a cnz setup$dph jrc selerr lda @adrv add a mov c,a mvi b,0 lxi h,@dtbl dad b lded @dph mov m,e ;set current DPH in @dtbl inx h mov m,d jr selcom ;DE=dph selerr: lxi h,0 ret notlgi: lda @adrv add a mov c,a mvi b,0 lxi h,@dtbl dad b mov e,m ;get current DPH from @dtbl inx h mov d,m ;DE=dph sded @dph selcom: lhld @cmode lxi b,0 ; bit 7,m ;Tracks-per-side not valid for Hard disks. jrnz selxit inx h ; ; bit 1,m ;unless its Z17... ; ; jrz sc0 ; ; mvi b,4 ;then side 1 has 4 less tracks (8 on DT) sc0: mvi a,40 ;assume 5" ST inx h bit 7,m ;check 5" drive jrz sc1 mvi a,77 ;8" drives have 77 tracks sc1: mov c,a ;set side 0 tracks sub b mov b,a inx h ;fix for HT bug bit 5,m ;check for DT jrz selxit slar b ;multiply # of tracks by 2 if DT slar c ; selxit: sbcd @tps lded @dph lxi h,+12 dad d ;point to DPB entry mov c,m inx h mov b,m push b ;save DPB ldax b ;sectors-per-track, byte value lxi h,+15 dad b mov b,m ;psh inr b gh2: dcr b jz gh3 srlr a jr gh2 gh3: sta @pspt ;physical sectors per track xchg ;put DPH in (HL) for BDOS mov e,m inx h mov d,m ;DE=sectrn dcx h pop b ;BC=dpb ret setup$dph: ora a ;reset [CY] lhld @cmode ;HL=modes bit 7,m ;check for hard-disk drive (modes not standard) rnz call ?getdp stc rnz lhld @dph ;restore dph mov m,c ;set XLAT table inx h mov m,b lxi b,12-1 dad b ;point to dpb mov c,m ;get DPB addr inx h mov h,m ;(HL=dpb) mov l,c xchg lxi b,17 ldir ora a ;reset [CY] ret ; Allocate space from hash pool. ; Does nothing if space exhausted (caller must init for "no hash") ; BC = size of hash, DE = &DPH.HASH ; Preserves BC, A ?halloc: lhld hleft ora a dsbc b rc ; no space shld hleft lhld hlast xchg mov m,e inx h mov m,d inx h mvi m,hbnk xchg dad b shld hlast ret home: lxi b,0 ; same as set track zero settrk: sbcd trk ret setsec: sbcd sect ret setdma: sbcd @dma lda @cbnk ; default DMA bank is current bank setbnk: sta @dbnk ret sectrn: mov l,c ! mov h,b mov a,d ! ora e ! rz xchg ! dad b ! mov l,m ! mvi h,0 dcx h ;sectors numbered 0 - (n-1) ret read: mvi e,6 ;read entry is +6 jmp rw$common ; use common code write: mvi e,9 ;write entry is +9 rw$common: ;do any track/sector/side conversion... xra a sta @side lhld trk shld @trk lhld sect shld @sect lhld @cmode bit 7,m ;floppy or hard-disk? jrnz rw0 inx h inx h inx h bit 6,m ;DS jrz rw0 mov a,m ani 01110b ;DSALG lxi h,dstbl mov c,a mvi b,0 dad b mov c,m inx h mov h,m mov l,c call icall rw0: mov a,e calmod: lhld curmdl jmp addjmp ; leap to driver ;; 0 1 2 3 4 5 6 7 dstbl: dw wrap,alt1,cont1,cont2,alt2,dsret,dsret,dsret cont2: lda @pspt ;as done by Gnat srlr a ;SPT must be EVEN mov c,a lxi h,@sect mov a,m sub c ;don't change the sector number on side 1 rc mov c,a ;save for cont1 jr side1 cont1: call cont2 rc mov m,c ret ;side1 already set alt1: lxi h,@trk rarr m mvi a,0 ral jr sside alt2: call alt1 ;Kaypro ora a ;side 0? rz ;yes, done. lxi h,@sect ;for KAYPRO, sectors on side 1 lda @pspt ;are numbered PSPT+1 to PSPT*2. add m ; mov m,a ret wrap: lbcd @tps ;B=tracks on side 1, C=tracks on side 0 lda @trk ;(for all except Z17, B=C) cmp c rc neg add c add b dcr a sta @trk side1: mvi a,1 sside: sta @side dsret: ret multio: sta @cnt ! ret flush: xra a ! ret ; return with no error @side: ds 1 ; current side of media (floppy only) @trk: ds 2 ; current track number @sect: ds 2 ; current sector number @cnt: db 0 ; record count for multisector transfer @dbnk: db 0 ; bank for disk DMA operations @pspt: ds 1 @tps: ds 2 @rcnfg: ds 1 trk: ds 2 sect: ds 2 @dtacb: dw dtacb1 @dircb: dw dircb1 dircb1: db 0ffh ;drive db 0,0,0,0,0 dw 0,0,2100h ;directly after CCP image (max 8K CCP) db 0 dw dircb2 dircb2: tion. SHOW and DIR display the Archive option. F1=ON|OFF turns on or off the user-definable file attribute F1. F2=ON|OFF turns on or off the user-definable file attribute F2. F3=ON|OFF turns on or off the user-definable file attribute F3. F4=ON|OFF turns on or off the user-definable file attribute F4. ///3Examples SET [PROTECT=ON] Turns on password protection for all the files on the disk. You must turn on password protection before you can assign passwords to files. SET [PROTECT=OFF] Disables password protection for the files on your disk. A>SET MYFILE.TEX [PASSWORD=MYFIL] MYFIL is the password assigned to file MYFILE.TEX. B>SET *.TEX [PASSWORD=SECRET, PROTECT=WRITE] Assigns the password SECRET to all the TEX files on drive B. Each TEX file is given a WRITE protect mode to prevent unauthorized editing. A>SET MYFILE.TEX [RO SYS] Sets MYFILE.TEX to Read-Only and SYStem. ///2Default A>SET [DEFAULT=dd] Instructs the system to use dd as a password if you do not enter a password for a password-protected file. ///2Time-Stamps Syntax: SET [CREATE=ON] SET [ACCESS=ON] SET [UPDATE=ON] Explanation: The above SET commands allow you to keep a record of the time and date of file creation and update, or of the last access and update of your files. ///3Options [CREATE=ON] turns on CREATE time stamps on the disk in the default or specified drive. To record the creation time of a file, the CREATE option must be turned on before the file is created. [ACCESS=ON] turns on ACCESS time stamps on the disk in the default or specified drive. ACCESS and CREATE options are mutually exclusive; only one can be in effect at a time. If you turn on the ACCESS time stamp on a disk that previously had CREATE time stamp, the CREATE time stamp is automatically turned off. [UPDATE=ON] turns on UPDATE time stamps on the disk in the default or specified drive. UPDATE time stamps record the time the file was last modified. ///3Examples A>SET [ACCESS=ON] A>SET [CREATE=ON,UPDATE=ON] ///2Drives Syntax: SET {d:} [RO] SET {d:} [RW] Example: A>SET B: [RO] Sets drive B to Read-Only. ///1SETDEF Syntax: SETDEF { d: {,d: {,d: {,d:}}}} {[ TEMPORARY = d: ] | [ ORDER = (typ {,typ}) ]} SETDEF [DISPLAY | NO DISPLAY] SETDEF [PAGE | NOPAGE] Explanation: SETDEF allows the user to display or define up to four drives for the program search order, the drive for temporary files, and the file type search order. The SETDEF definitions affect only the loading of programs and/or execution of SUBMIT (SUB) files. SETDEF turns on/off the system Display and Console Page modes. When on, the system displays the location and name of programs loaded or SUBmit files executed, and stops after displaying one full console screen of information. ///2Examples A>SETDEF Displays current SETDEF parameters. A>SETDEF [TEMPORARY=C:] Sets disk drive C as the drive to be used for temporary files. A>SETDEF C:,* Tells the system to search for a program on drive C, then, if not found, search for it on the default drive. A>SETDEF [ORDER=(SUB,COM)] Instructs the system to search for a SUB file to execute. If no SUB file is found, search for a COM file. A>SETDEF [DISPLAY] Turns on the system display mode. Henceforth, the system displays the name and location of programs loaded or submit files executed. A>SETDEF [NO DISPLAY] Turns off the system Display mode. ///1SHOW Syntax: SHOW {d:}{[SPACE |LABEL |USERS |DIR |DRIVE]} Explanation: The SHOW command displays the following disk drive information: Access mode and the amount of free disk space Disk label Current user number and Number of files for each user number on the disk Number of free directory entries for the disk Drive characteristics ///2Examples A>SHOW A>SHOW [SPACE] Instructs the system to display access mode and amount of space left on logged-in drives. A>SHOW B: Show access mode for drive B and amount of space left on drive B. A>SHOW B:[LABEL] Displays label information for drive B. A>SHOW [USERS] Displays the current user number and all the users on drive A and the corresponding number of files assigned to them. A>SHOW C:[DIR] Displays the number of free directory entries on drive C. A>SHOW [DRIVE] Displays the drive characteristics of drive A. ///1SID Syntax: SID {pgm-filespec} {,sym-filespec} Explanation: The SID symbolic debugger allows you to monitor and test programs developed for the 8080 microprocessor. SID supports real-time breakpoints, fully monitored execution, symbolic disassembly, assembly, and memory display and fill functions. SID can dynamically load SID utility programs to provide traceback and histogram facilities. ///2Commands Command Meaning As (Assemble) Enter assembly language statements s is the start address Cs{b{,d}} (Call) Call to memory location from SID s is the called address b is the value of the BC register pair d is the value of the DE register pair D{W}{s}{,f} (Display) Display memory in hex and ASCII W is a 16-bit word format s is the start address f is the finish address Epgm-filespec (Load) Load program and symbol table {,sym-filespec} for execution E*sym-filespec (Load) Load a symbol table file Fs,f,d (Fill) Fill memory with constant value s is the start address f is the finish address d is an eight-bit data item G{p}{,a{,b}} (Go) Begin Execution p is a start address a is a temporary breakpoint H (Hex) Displays all symbols with addresses in Hex H.a Displays hex, decimal, and ASCII values of a where a is a symbolic expression Ha,b Computes hex sum and difference of a and b where a and b are symbolic expressions Icommand tail (Input) Input CCP command line L{s}{,f} (List) List 8080 mnemonic instructions s is the start address f is the finish address Ms,h,d (Move) Move Memory Block s is the start address h is the high address of the block d is the destination start address P{p{,c}} (Pass) Pass point set, reset, and display p is a permanent breakpoint address c is initial value of pass counter Rfilespec{,d} (Read) Read Code/Symbols d is an offset to each address S{W}s (Set) Set Memory Values s is address where value is sent W is 16 bit word T{n{,c}} (Trace) Trace Program Execution n is the number of program steps c is the utility entry address. T{W}{n{,c}} (Trace) Trace Without Call W instructs SID not to trace subroutines n is the number of program steps c is the utility entry address U{W}{n{,c}} (Untrace) Monitor Execution without Trace n is the number of program steps c is the utility entry address W instructs SID not to trace subroutines V (Value) Display the value of the next available location in memory (NEXT), the next location after the largest file read in (MSZE), the current value of the Program counter (PC), and the address of the end of available memory (END) Wfilespec,s,f (Write) Write the contents of a contiguous block of memory to filespec. f is finish address X{f}{r} (Examine) Examine/alter CPU state. f is flag bit C,Z,M,E or I. r is register A,B,D,H,S or P. ///2Examples A>SID CP/M 3 loads SID from drive A into memory. SID displays the # prompt when it is ready to accept commands. A>B:SID SAMPLE.HEX CP/M 3 loads SID and the program file SAMPLE.HEX into memory from drive B. ///2Utilities SID utilities, HIST.UTL and TRACE.UTL are special programs that operate with SID to provide additional debugging facilities. The mechanisms for system initialization, data collection, and data display are described in the CP/M SID User's Guide. The HIST utility creates a histogram (bar graph) showing the relative frequency of execution of code within selected program segments of the test program. The HIST utility allows you to monitor those sections of code that execute most frequently. The TRACE utility obtains a backtrace of the instructions that led to a particular breakpoint address in a program under test. You can collect the addresses of up to 256 instructions between pass points in U or T modes. ///1SUBMIT Syntax: SUBMIT {filespec} {argument} ... {argument} Explanation: The SUBMIT command lets you execute a group (batch) of commands from a SUBmit file (a file with filetype of SUB). ///2Subfile The SUB file can contain the following types of lines: Any valid CP/M 3 command Any valid CP/M 3 command with SUBMIT parameters ($0-$9) Any data input line Any program input line with parameters ($0 to $9) The command line cannot exceed 135 characters. The following lines illustrate the variety of lines which may be entered in a SUB file: DIR DIR *.BAK MAC $1 $$$4 PIP LST:=$1.PRN[T$2 $3 $5] DIR *.ASM PIP SUBMIT A>SUBMIT SUBA A>SUBMIT AA ZZ SZ A>SUBMIT B:START DIR E: ///2PROFILE.SUB Everytime you power up or reset your computer, CP/M 3 looks for a special SUBmit file named PROFILE.SUB to execute. If it does not exist, CP/M 3 resumes normal operation. If the PROFILE.SUB file exists, the system executes the commands in the file. This file is convenient to use if you regularly execute a set of commands before you do your regular session on the computer. ///1TPA Syntax: TPA Explanation: The TPA Command displays the amount of memory available for TPA. The amount of memory is a direct translation of the current BDOS entry page, including any active RSXs. This can be used to determine if RSXs are resident, by comparing the TPA to the value seen immediately after boot. Example: A>TPA 57.25K TPA ///1TR Syntax: TR d:{filespec}=filespec[C|U] Explanation: The TR Command copies one or more files and translates line endings between Unix and CP/M conventions. The option C causes every line feed character to be prefixed with a carriage return, unless already present. The U option removes all carriage returns from the file. Neither source nor destination drive is required to be networked, although that would be the normal case. The source filespec cannot be ambiguous if a destination filespec in given. Example: A>TR C:=P:*.ASM[C] ///1TYPE Syntax: TYPE {filespec {[ PAGE | NOPAGE ]}} Explanation: The TYPE command displays the contents of an ASCII character file on your screen. [PAGE] Causes the console listing to be displayed in paged mode; i.e., stop automatically after listing n lines of text, where n normally defaults to 24 lines per page. [NOPAGE] Turns off Console Page Mode and continuously displays a typed file on the screen. ///2Examples A>TYPE MYPROG.PLI Displays the contents of the file MYPROG.PLI on your screen. A>TYPE B:THISFILE [PAGE] Displays the contents of the file THISFILE from drive B on your screen twenty four lines at a time. ///1USER Syntax: USER {number} Explanation: The USER command sets the current user number. The disk directory can be divided into distinct groups according to a "User Number." User numbers range from 0 through 15. ///2Examples A>USER Enter User#:5 5A> The current user number is now 5 on drive A. A>USER 3 3A> This command changes the current User Number to 3. ///1XREF Syntax: XREF {d:} filename {$P} Explanation: XREF provides a cross-reference summary of variable usage in a program. XREF requires the .PRN and .SYM files produced by MAC or RMAC for input to the program. The SYM and PRN files must have the same filename as the filename in the XREF command tail. XREF outputs a file of type .XRF. Examples: A>XREF b:MYPROG A>XREF b:MYPROG $P UT PRINTER command. FILTER specifies filtering of control characters, which means that control characters are translated to printable characters. For example, an ESCape character is translated to ^[. NO FILTER means that PUT does not translate control characteExamples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (seedb 0ffh ;drive db 0,0,0,0,0 dw 0,0,2500h db 0 dw dircb3 dircb3: db 0ffh ;drive db 0,0,0,0,0 dw 0,0,2900h db 0 dw dircb4 dircb4: db 0ffh ;drive db 0,0,0,0,0 dw 0,0,2d00h ;dir buffers: 2100-3100 db 0 dw 0000 ;end of DIR buffers dtacb1: db 0ffh ;drive db 0,0,0,0,0 dw 0,0,3100h db 0 dw dtacb2 dtacb2: db 0ffh ;drive db 0,0,0,0,0 dw 0,0,3500h db 0 dw dtacb3 dtacb3: db 0ffh ;drive db 0,0,0,0,0 dw 0,0,3900h db 0 dw dtacb4 dtacb4: db 0ffh ;drive db 0,0,0,0,0 dw 0,0,3d00h ;data buffers: 3100-4100 db 0 dw 0000 ;end of data buffers @scrbf dw 4100h ;scratch buffer 4100-4500 ; Max. system space: 4500h to "bnktop", 38K if 8K common. end 0042 ?DRTBL 003C ?DVTBL 0000 ?GETDP 0523 ?HALLOC 0000 ?SERDP 0054 ?STBNK 01C6 ?TIMOT 006A @ADRV 0000 @AIVEC 0000 @AOVEC 0341 @CBNK 0000 @CIVEC 006F @CMODE 05FD @CNT 0000 @COVEC 01B3 @CTBL 0000 @DATE 05FE @DBNK 0609 @DIRCB 0073 @DMA 0071 @DPH 0063 @DSTArn if timed out jr winrdy1 ;else try again ; ; winbusy: ; ; Wait for device not busy ; mvi h,7 ;set up dead man counter lxi d,0 winbusy1: in winstat ;get status cma bit 7,a ;if not busy rnz ;return call timer ;else count down rz ;and return if timed out jr winbusy1 ; end ҢÞ+}*#}o|g:O*s#r#w!~w/~@w//Hͥ* >=)_g:0w: :<RHͥ:w RCVEC ; 24 018h 098h 0300 9007 dw GTFCB ; 26 01ah 09ah 0302 9C07 dw GTFCCR ; 28 01ch 09ch 0304 9707 dw GTFCRR ; 30 01eh 09eh 0306 DE07 dw GTDIRE ; 32 020h 0a0h 0308 0A08 dw GTOSCT ; 34 022h 0a2h 030A 1E08 dw GTMISC ; 36 024h 0a4h 030C 5908 dw GTLOGV ; 38 026h 0a6h 030E E308 dw LIST1 ; 40 028h 0a8h 0310 BA08 dw SELDSK ; 42 02ah 0aah 0312 EC08 dw LSTBLK ; 44 02ch 0ach 0314 5909 dw GETVER ; 46 02eh 0aeh 0316 0000 dw 0 ; 48 030h 0b0h - to be removed 0318 DA08 dw RESET ; 50 032h 0b2h 031A 6609 dw NWSTAT ; 52 034h 0b4h 031C 6D09 dw NWCFTB ; 54 036h 0b6h 031E 9209 dw SDMSGU ; 56 038h 0b8h 0320 9E09 dw RVMSGU ; 58 03ah 0bah 0322 7509 dw LOGIN ; 60 03ch 0bch 0324 8909 dw LOGOFF ; 62 03eh 0beh 0326 E806 dw STSF ; 64 040h 0c0h 0328 1707 dw STSN ; 66 042h 0c2h 032A 0000 dw 0 ; 68 044h 0c4h - to be removed 032C 1805 dw CKSTDP ; 046h 0c6h 032E 3F05 dw CHKMSC ; 048h 0c8h ; hi bit is "end" signal, else keep executing routines in list... ; byte & 07fh is index into FUNTB3, routine to call. FUNTB2: 0330 80 db 080h ; - never called 0001 = fgtvr equ $-FUNTB2 0331 AE db 0aeh ; 0002 = frssy equ $-FUNTB2 0332 B2 db 0b2h ; 0003 = frsvc equ $-FUNTB2 0333 96 db 096h ; 0004 = fsldk equ $-FUNTB2 0334 AA db 0aah ; 0005 = fopfi equ $-FUNTB2 0335 080E189A db 008h, 00eh, 018h, 09ah ; 0009 = fdlfi equ $-FUNTB2 0339 0698 db 006h, 098h ; 000B = fsrfs equ $-FUNTB2 033B 4018A0 db 040h, 018h, 0a0h ; 000E = fsrnx equ $-FUNTB2 033E 4218A0 db 042h, 018h, 0a0h ; 0011 = frdsq equ $-FUNTB2 0341 4806181CA2 db 048h, 006h, 018h, 01ch, 0a2h ; READ SEQ 0016 = fwrsq equ $-FUNTB2 0346 480810189C db 048h, 008h, 010h, 018h, 09ch ; WRITE SEQ 001B = frefi equ $-FUNTB2 034B 080A0298 db 008h, 00ah, 002h, 098h ; 001F = flgvc equ $-FUNTB2 034F A6 db 0a6h ; 0020 = fgtal equ $-FUNTB2 0350 120218A4 db 012h, 002h, 018h, 0a4h ; 0024 = fwrpr equ $-FUNTB2 0354 120298 db 012h, 002h, 098h ; 0027 = fstfi equ $-FUNTB2 0357 06189C db 006h, 018h, 09ch ; 002A = frdrr equ $-FUNTB2 035A 4806181EA2 db 048h, 006h, 018h, 01eh, 0a2h ; READ RAND 002F = fwrrr equ $-FUNTB2 035F 480810189E db 048h, 008h, 010h, 018h, 09eh ; WRITE RAND [ZEROFIL] 0034 = fgtsz equ $-FUNTB2 0364 06189E db 006h, 018h, 09eh ; 0037 = flkrc equ $-FUNTB2 0367 080C189E db 008h, 00ch, 018h, 09eh ; 003B = fstpw equ $-FUNTB2 036B 94 db 094h ; 003C = flgin equ $-FUNTB2 036C 3C98 db 03ch, 098h ; 003E = flgof equ $-FUNTB2 036E 3E98 db 03eh, 098h ; 0040 = fsdnw equ $-FUNTB2 0370 B8 db 0b8h ; 0041 = frvnw equ $-FUNTB2 0371 BA db 0bah ; 0042 = fnwst equ $-FUNTB2 0372 B4 db 0b4h ; 0043 = fnwcf equ $-FUNTB2 0373 B6 db 0b6h ; 0044 = fstcp equ $-FUNTB2 ; ***** DUPLICATE of fstpw ***** 0374 94 db 094h ; 0045 = fsvcf equ $-FUNTB2 0375 3E18A4 db 03eh, 018h, 0a4h ; 0048 = fgtdl equ $-FUNTB2 0378 4698 db 046h, 098h ; 004A = fdkms equ $-FUNTB2 037A 460218A4 db 046h, 002h, 018h, 0a4h ; 004E = flst1 equ $-FUNTB2 037E A8 db 0a8h 004F = flstbk equ $-FUNTB2 037F AC db 0ach ; table of message handlers? per BDOS func? ; -1 = ERROR, 0 = PASSTHRU, else index into FUNTB2 FUNTB1: 0380 00 db 0 ; 0 - 0381 00 db 0 ; 1 - 0382 00 db 0 ; 2 - 0383 00 db 0 ; 3 - 0384 00 db 0 ; 4 - 0385 4E db flst1 ; 5 - 038֎ % Rh ; D'b HG$@1X "H䒡 )JdR HH 򘀊r9n1 cv;cv;cv;cv;cv;cv;cv;c` q 2B@Y$ CB@T |P EB@Vh a[ ePpxʇ k8 Ԁh(8b͡ * @K60Z,: : ~d ~d ~d0 UX 3V shuiNU` 6̑U` 631N"c1La9 Ap4$' 1n2Mqp4$<(ʲ-W%;e^ z_&U ܐ3YB@kjˁg 0HhF6~WX ik0 #ZylL!Q 0 X _=/0j1D7( t \VpJ zA/% xjnd=("Un/`EY .Ef 6H&Pz8 Fi*\K* h  € D@@0I0HRI0a8H"@ O @00Jt[%!0F` @@@(BP|  q T/ `0 7  D  ;  HD2! 2 d E1 !@` F#bRI}Z2+9k4 0t â PZ0ˬDdk6k8 ԀEV*.ե'H *ͦ`ES60 H C'j<'* fFfPFmZ#u0o"ek@FVUj@B-emA H@V@0X ek GV2"1 5nAbZ4 @ͻ@|>n L&dSJ1&KndHE h# XWEj@Y ` : @ KUj@YuVHAY 3jx#¦@Tâ * * ӈEj@Y,j͡O em\"+f[Pե[VUi@" $#++d[ Z HemYVCYVUn@( $EnGV!mZQU @ ƌ+X #k+UmB\fZPyGV$Ul]bL'1FwFU CYVYdumK3B 6A 2`LZեT<â`C63n60p( ٵy0364GV%`ٴ$ ej Y#* !1F" ,ۮ:-a3*=Yd0곀 @vtM,:B ! \pFD JVFy?VP|ʲ¶' bͺ + ?9( 0jkRhWp@3tW@b1_,>g> 2<#XWt> fPr\t,Uj@Db+Rͭ 2 8úc (;60 ʱ3hԀ1ap6mր+ +P+?D6U\áPI fذw՛^5TbV^ٴ 2h# 6@ % @ % FV*'c V f0FZ`c ap1U"Y$ej Y"LD&h G $ %!2  0Z,: k1o o 5K2  `V hH F, ! * >p >c:99Q]-%:2#-9 9Q 230ӑT49I Y5M3Е#*9 Q 2p 6 00 db 0 ; 6 - 0387 00 db 0 ; 7 - 0388 00 db 0 ; 8 - 0389 00 db 0 ; 9 - 038A 00 db 0 ; 10 - 038B 00 db 0 ; 11 - 038C 01 db fgtvr ; 12 - GET VERSION 038D 02 db frssy ; 13 - RESET DISK SYSTEM 038E 04 db fsldk ; 14 - SELECT DISK 038F 05 db fopfi ; 15 - OPEN FILE 0390 05 db fopfi ; 16 - CLOSE FILE 0391 0B db fsrfs ; 17 - SEARCH FIRST 0392 0E db fsrnx ; 18 - SEARCH NEXT 0393 09 db fdlfi ; 19 - DELETE FILE 0394 11 db frdsq ; 20 - READ SEQUENTIAL 0395 16 db fwrsq ; 21 - WRITE SEQUENTIAL 0396 05 db fopfi ; 22 - MAKE FILE 0397 1B db frefi ; 23 - RENAME FILE 0398 1F db flgvc ; 24 - GET LOGIN VECTOR 0399 00 db 0 ; 25 - GET CURRENT DISK 039A 00 db 0 ; 26 - SET DMA ADDR 039B 20 db fgtal ; 27 - GET ALLOC ADDR 039C 24 db fwrpr ; 28 - WRITE PROTECT DISK 039D 1F db flgvc ; 29 - GET R/O VECTOR 039E 27 db fstfi ; 30 - SET FILE ATTR 039F 20 db fgtal ; 31 - GET DPB ADDR 03A0 00 db 0 ; 32 - GET/SET USER CODE 03A1 2A db frdrr ; 33 - READ RANDOM 03A2 2F db fwrrr ; 34 - WRITE RANDOM 03A3 34 db fgtsz ; 35 - GET FILE SIZE 03A4 34 db fgtsz ; 36 - SET RAND RECORD 03A5 03 db frsvc ; 37 - RESET DRIVE 03A6 03 db frsvc ; 38 - ACCESS DRIVE 03A7 03 db frsvc ; 39 - FREE DRIVE 03A8 2F db fwrrr ; 40 - WRITE RAND ZERO FILL 03A9 00 db 0 ; 41 - TEST & WRITE RECORD 03AA 37 db flkrc ; 42 - LOCK RECORD 03AB 37 db flkrc ; 43 - UNLOCK RECORD 03AC 00 db 0 ; 44 - SET MULTISECTOR COUNT 03AD 00 db 0 ; 45 - SET BDOS ERR MODE 03AE 4A db fdkms ; 46 - GET DISK FREE SPACE 03AF 00 db 0 ; 47 - CHAIN TO PROGRAM (***? can't chain to remote program) 03B0 44 db fstcp ; 48 - FLUSH BUFFERS 03B1 00 db 0 ; 49 - GET/SET SCB ; 50..63 - handled by special case 0032 = NFTB1 equ $-FUNTB1 ; if any are passed to server, must preserve FUNCOD as real code FUNTBX: 03B2 44 db fstcp ; 98 - FREE BLOCKS 03B3 05 db fopfi ; 99 - TRUNCATE FILE 03B4 00 db 0 ; 100 - SET DIR LABEL ****support?**** 03B5 48 db fgtdl ; 101 - GET DIR LABEL BYTE 03B6 48 db fgtdl ; 102 - READ FILE DATE-PWD MODE 03B7 00 db 0 ; 103 - WRITE FILE XFCB ****support?**** 03B8 00 db 0 ; 104 - SET DATE & TIME 03B9 00 db 0 ; 105 - GET DATE & TIME - can't support here, use SEND NW MESG 03BA 3B db fstpw ; 106 - SET DEF PASSWORD 03BB 00 db 0 ; 107 - GET SERIAL NUMBER 03BC 00 db 0 ; 108 - GET/SET PGM RET CODE 03BD 00 db 0 ; 109 - GET/SET CONS MODE 03BE 00 db 0 ; 110 - GET/SET OUT DELIM 03BF 00 db 0 ; 111 - PRINT BLOCK 03C0 4F db flstbk ; 112 - LIST BLOCK 000F = NFTBX equ $-FUNTBX ; CP/Net functions, not known to BDOS FUNTBN: 03C1 3C db flgin ; 64 - LOGIN 03C2 3E db flgof ; 65 - LOGOFF 03C3 40 db fsdnw ; 66 - SEND NW MESG 03C4 41 db frvnw ; 67 - RECV NW MESG 03C5 42 db fnwst ; 68 - GET NW STATUS 03C6 43 db fnwcf ; 69 - GET NW CFG 03C7 44 db fstcp ; 70 - SET COMP ATTR 03C8 45 db fsvcf ; 71 - GET SERVER CFG 0008 = NFTBN equ $-FUNTBN FUNTBS: 03C9 0032 db 0,NFTB1 03CB 8003 dw FUNTB1 03CD 4008 db CNMIN,NFTBN 03CF C103 dw FUNTBN 03D1 620F db CXMIN,NFTBX 03D3 B203 dw FUNTBX 03D5 0000 dw 0 SNDHDR: 03D7 216200 lxi h,MSGTOP 03DA 3600 mvi m,0 ; FMT = CP/Net 03DC 23 inx h ; DID (server ID) already set 03DD 23 inx h ; SID, our node ID, will be set by SNIOS 03DE 23 inx h 03DF 23 inx h 03E0 23 inx h 03E1 EB xchg ; DE = MSGDAT 03E2 2AA901 lhld MCRPNT 03E5 AF xra a ; negate DE 03E6 93 sub e 03E7 4F mov c,a 03E8 3E00 mvi a,0 03EA 9A sbb d 03EB 47 mov b,a 03EC 09 dad b ; HL -= DE 03ED 7D mov a,l 03EE B4 ora h 03EF CAF603 jz SNDHD1 ; size set already 03F2 2B dcx h 03F3 EB xchg 03F4 2B dcx h 03F5 73 mov m,e ; SIZ = length - 1 SNDHD1: 03F6 016200 lxi b,MSGTOP SDMSGE: 03F9 CD0000 call SNDMSG 03FC 3C inr a 03FD C0 rnz 03FE C30604 jmp NERROR RVMSGE: 0401 CD0000 call RCVMSG 0404 3C inr a 0405 C0 rnz NERROR: 0406 21FFFF lxi h,-1 0409 7C mov a,h 040A C31004 jmp NDEND NDENDR: 040D 3AA801 lda RETCOD NDEND: 0410 EB xchg 0411 2AA301 lhld USTACK 0414 F9 sphl 0415 EB xchg 0416 6F mov l,a 0417 44 mov b,h 0418 C9 ret RCVPAR: 0419 016200 lxi b,MSGTOP 041C CD0104 call RVMSGE 041F 216700 lxi h,MSGDAT 0422 22A901 shld MCRPNT 0425 C9 ret tnextp: ; abandon call to real BDOS 0426 2AA301 lhld USTACK 0429 F9 sphl TBDOSP: 042A 2AA601 lhld PARAMT 042D EB xchg 042E 3AA501 lda FUNCOD 0431 4F mov c,a 0432 C30900 jmp next CKFCBD: 0435 2AA601 lhld PARAMT 0438 7E mov a,m 0439 3D dcr a 043A F24004 jp CKFCB1 043D CD3302 call CURDSK CKFCB1: 0440 5F mov e,a 0441 1600 mvi d,0 0443 CD4F04 call CHKDSK 0446 FEFF cpi 0ffh 0448 C0 rnz 0449 CD2A04 call TBDOSP 044C C31004 jmp NDEND CHKDSK: 044F 210200 lxi h,CFGTBL+BSDSKS 0452 19 dad d 0453 19 dad d 0454 7E mov a,m 0455 17 ral 0456 DA5C04 jc CHKDS1 ; remote disk 0459 3EFF mvi a,0ffh 045B C9 ret CHKDS1: 045C 1F rar 045D E60F ani 00fh ; remote server disk number 045F 3C inr a 0460 4F mov c,a 0461 23 inx h 0462 7E mov a,m ; remote server node ID 0463 326300 sta MSGID 0466 C9 ret SNDFCB: 0467 CD6D04 call CKSFCB 046A C3D703 jmp SNDHDR CKSFCB: 046D CD3504 call CKFCBD ; check FCB disk for local/remote (local does not return) STFCB: 0470 CD1502 call CURUSR 0473 2AA901 lhld MCRPNT 0476 77 mov m,a ; put USR in msg buf 0477 23 inx h 0478 71 mov m,c ; put DSK SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF drive is required to be networked, although that would be the normal case. The source filespec cannot be ambiguous if a destination filespec in given. Example: A>TR C:=P:*.ASM[C] ///1TYPE Syntax: TYPE {filespec {[ PAGE | NOPAGE ]}} Explanation: The TYPE command displays the contents of an ASCII character file on your screen. [PAGE] Causes the console listing to be displayed in paged mode; i.e., stop automatically after listing n lines of text, where n normally defaults to 24 lines per page. [NOPAGE] Turns off Console Page Mode and continuously displays a typed file on the screen. ///2Examples A>TYPE MYPROG.PLI Displays the contents of the file MYPROG.PLI on your screen. A>TYPE B:THISFILE [PAGE] Displays the contents of the file THISFILE from drive B on your screen twenty four lines at a time. ///1USER Syntax: USER {number} Explanation: The USER command sets the current user number. The disk directory can be divided into distinct groups according to a "User Number." User numbers range from 0 through 15. ///2Examples A>USER Enter User#:5 5A> The current user number is now 5 on drive A. A>USER 3 3A> This command changes the current User Number to 3. ///1XREF Syntax: XREF {d:} filename {$P} Explanation: XREF provides a cross-reference summary of variable usage in a program. XREF requires the .PRN and .SYM files produced by MAC or RMAC for input to the program. The SYM and PRN files must have the same filename as the filename in the XREF command tail. XREF outputs a file of type .XRF. Examples: A>XREF b:MYPROG A>XREF b:MYPROG $P  line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searc in msg buf 0479 23 inx h 047A EB xchg 047B 2AA601 lhld PARAMT 047E 23 inx h 047F EB xchg 0480 0623 mvi b,35 0482 CDF304 call MCPYTS ; copy FCB to msg buf 0485 AF xra a 0486 32AD01 sta FNTMPF 0489 32AC01 sta F5SETF 048C 2AA901 lhld MCRPNT 048F 11DDFF lxi d,-35 0492 19 dad d ; point to start of FCB name in msg buf SUBTMP: 0493 CDB504 call CKDOL ; substitute $NN for $$$ at start of name 0496 0600 mvi b,0 0498 09 dad b ; skip rest of 3 chars 0499 23 inx h 049A 7E mov a,m 049B E680 ani 080h ; check f5' attr - partial close/delete XFCBs only 049D 23 inx h 049E CAAB04 jz SUBTM1 04A1 7E mov a,m 04A2 E680 ani 080h ; check f6' attr - assign passwd/set byte count 04A4 C2AB04 jnz SUBTM1 04A7 3D dcr a 04A8 32AC01 sta F5SETF SUBTM1: 04AB 3AAD01 lda FNTMPF 04AE 87 add a 04AF 32AD01 sta FNTMPF 04B2 23 inx h 04B3 23 inx h 04B4 23 inx h CKDOL: 04B5 0E03 mvi c,3 04B7 3E24 mvi a,'$' CKDOL1: 04B9 BE cmp m 04BA C0 rnz 04BB 23 inx h 04BC 0D dcr c 04BD C2B904 jnz CKDOL1 04C0 EB xchg 04C1 21AD01 lxi h,FNTMPF 04C4 34 inr m 04C5 1B dcx d 04C6 3A0100 lda CFGTBL+BSRID ; client (slave) ID 04C9 47 mov b,a 04CA CDDA04 call HEXDIG 04CD 1B dcx d 04CE 78 mov a,b 04CF 1F rar 04D0 1F rar 04D1 1F rar 04D2 1F rar 04D3 CDDA04 call HEXDIG 04D6 13 inx d 04D7 13 inx d 04D8 EB xchg 04D9 C9 ret HEXDIG: 04DA E60F ani 00fh 04DC FE0A cpi 10 04DE D2E504 jnc HEXDG1 04E1 C630 adi '0' 04E3 12 stax d 04E4 C9 ret HEXDG1: 04E5 C637 adi 'A'-10 04E7 12 stax d 04E8 C9 ret RENTMP: 04E9 2AA901 lhld MCRPNT 04EC 11EDFF lxi d,-19 04EF 19 dad d 04F0 C39304 jmp SUBTMP MCPYTS: 04F3 1A ldax d 04F4 77 mov m,a 04F5 23 inx h 04F6 13 inx d 04F7 05 dcr b 04F8 C2F304 jnz MCPYTS 04FB 22A901 shld MCRPNT 04FE C9 ret WTDTC2: 04FF 0602 mvi b,2 0501 C30B05 jmp WTDTCS WTDTC8: 0504 0608 mvi b,8 0506 C30B05 jmp WTDTCS WTDTCP: 0509 0680 mvi b,SCTLNG WTDTCS: 050B 2AB809 lhld DMAADR 050E EB xchg 050F 2AA901 lhld MCRPNT 0512 CDF304 call MCPYTS 0515 C3D703 jmp SNDHDR CKSTDP: 0518 3AA601 lda PARAMT 051B C32105 jmp STDSK0 CKSTDK: 051E CD3302 call CURDSK STDSK0: 0521 5F mov e,a 0522 1600 mvi d,000h 0524 CD4F04 call CHKDSK 0527 FEFF cpi 0ffh 0529 C23205 jnz STDSK1 052C CD2A04 call TBDOSP 052F C31004 jmp NDEND STDSK1: 0532 326300 sta MSGID 0535 2AA901 lhld MCRPNT 0538 0D dcr c 0539 71 mov m,c 053A 23 inx h 053B 22A901 shld MCRPNT 053E C9 ret ; Handle multi-sector count CHKMSC: 053F CD3504 call CKFCBD ; does not return if disk is local ; From here on, we know the disk is remote 0542 CD0E02 call SYSMSC 0545 FE01 cpi 1 ; skip multi-sector handling if count == 1 0547 C8 rz ; returns to NDOSE5, goto next opcode. 0548 32B709 sta CURMSC 054B E1 pop h ; NDOSE5 ret addr 054C 22B309 shld MSCRET 054F E1 pop h ; FUNTB2 pointer (past CHKMSC) 0550 22B509 shld MSCTBP 0553 3AA501 lda FUNCOD 0556 FE21 cpi CRREAD 0558 DAAC05 jc CKMSC2 ; save rand rec position 055B 2AA601 lhld PARAMT ; FCB 055E 012100 lxi b,FCBRR0 0561 09 dad b 0562 5E mov e,m 0563 23 inx h 0564 56 mov d,m 0565 23 inx h 0566 7E mov a,m 0567 32B209 sta SAVRR+2 056A EB xchg 056B 22B009 shld SAVRR 056E C3AC05 jmp CKMSC2 CKMSC0: 0571 3AA801 lda RETCOD 0574 B7 ora a 0575 C2B805 jnz CKMSC1 0578 3AB709 lda CURMSC 057B 3D dcr a 057C 32B709 sta CURMSC 057F CAB805 jz CKMSC1 0582 216700 lxi h,MSGDAT 0585 22A901 shld MCRPNT 0588 2AB809 lhld DMAADR 058B 018000 lxi b,128 058E 09 dad b 058F 22B809 shld DMAADR 0592 3AA501 lda FUNCOD 0595 FE21 cpi CRREAD 0597 DAAC05 jc CKMSC2 ; advance random record number... 059A 2AA601 lhld PARAMT ; FCB 059D 012100 lxi b,FCBRR0 05A0 09 dad b 05A1 34 inr m 05A2 C2AC05 jnz CKMSC2 05A5 23 inx h 05A6 34 inr m 05A7 C2AC05 jnz CKMSC2 05AA 23 inx h 05AB 34 inr m CKMSC2: 05AC 217105 lxi h,CKMSC0 05AF E5 push h 05B0 2AB509 lhld MSCTBP 05B3 E5 push h 05B4 2AB309 lhld MSCRET 05B7 E9 pchl ; jmp NDOSE5 - do next opcode. Returns to CKMSC0 when done. ; done with multi-sec read/write, restore everything. CKMSC1: ; could be EOF, or some physical error 05B8 3AA501 lda FUNCOD 05BB FE21 cpi CRREAD 05BD DAE405 jc CKMSC3 ; restore file position... 05C0 3AB209 lda SAVRR+2 05C3 2AB009 lhld SAVRR 05C6 EB xchg 05C7 2AA601 lhld PARAMT ; FCB 05CA 012100 lxi b,FCBRR0 05CD 09 dad b 05CE 73 mov m,e 05CF 23 inx h 05D0 72 mov m,d 05D1 23 inx h 05D2 77 mov m,a ; If the program's next op is random read/write, then we are ; finished now. But, if the next op is sequential then ; we must set the file position back to where it started. ; Use READ RAND to set file position. Response is ignored. 05D3 3E21 mvi a,CRREAD 05D5 326500 sta MSGFUN 05D8 216700 lxi h,MSGDAT 05DB 22A901 shld MCRPNT 05DE CD6704 call SNDFCB 05E1 CD1904 call RCVPAR ; ignore data/error returned by CRREAD CKMSC3: 05E4 3AB709 lda CURMSC ; if error ended us early, need num sec completed. 05E7 5F mov e,a ; save where SYSMSC won't destroy it 05E8 CD0E02 call SYSMSC 05EB 93 sub e 05EC 67 mov h,a 05ED C9 ret ; NDENDR BCSTFN: ; broadcast func (set default password, set compat attrs) 05EE 110000 lxi d,0 05F1 CD7206 call FORALL 05F4 79 mov a,c 05F5 0C inr c 05F6 CAD806 jz RSTALL ; no (more) servers, reset and return 05F9 326300 sta MSGID 05FC 2AA601 lhld PARAMT 05FF EB xchg 0600 2AA901 lhld MCRPNT 0603 3AA501 lda FUNCOD 0606 FE38 cpi CDEFPW-CBMAX ; a.k.a. 106 - set def password 0608 CA0F06 jz BCST1 ; fn 70 - set compat attr 060B 73 mov m,e 060C C31406 jmp BCST2 BCST1: 060F 0608 mvi b,8 0611 CDF304 call MCPYTS BCST2: 0614 CDD703 call SNDHDR 0617 CD1904 call RCVPAR 061A C3EE05 jmp BCSTFN BCSTVC: ; broadcast "drive vector" funcs to all servers 061D 2AA601 lhld PARAMT 0620 EB xchg BCSTV1: 0621 CD7206 call FORALL 0624 E5 push h 0625 79 mov a,c 0626 0C inr c 0627 C23C06 jnz BCSTV2 ; some remote drives to do 062A CDD806 call RSTALL 062D D1 pop d 062E 3AA501 lda FUNCOD 0631 FE25 cpi CRSDSN ; reset drive 0633 C0 rnz ; only reset drive is passed to local 0634 4F mov c,a 0635 CD0900 call next 0638 32A801 sta RETCOD 063B C9 ret BCSTV2: 063C 326300 sta MSGID 063F 216700 lxi h,MSGDAT 0642 73 mov m,e 0643 23 inx h 0644 72 mov m,d 0645 23 inx h 0646 22A901 shld MCRPNT 0649 CDD703 call SNDHDR 064C 3AA501 lda FUNCOD 064F D626 sui 38 ; access drive 0651 CA6B06 jz BCSTV3 0654 F5 push psw 0655 CD1904 call RCVPAR 0658 F1 pop psw 0659 D1 pop d 065A 3D dcr a 065B CA2106 jz BCSTV1 065E 3A6700 lda MSGDAT 0661 32A801 sta RETCOD 0664 3C inr a 0665 CAD806 jz RSTALL 0668 C32106 jmp BCSTV1 BCSTV3: 066B CD3707 call RCVEC 066E D1 pop d 066F C32106 jmp BCSTV1 ; Returns vector of all disks for given server, ; each call skips servers already reported. FORALL: 0672 210200 lxi h,CFGTBL+BSDSKS 0675 D5 push d 0676 110000 lxi d,0 0679 01FF10 lxi b,010ffh FORAL1: 067C 7E mov a,m 067D 17 ral 067E D2BC06 jnc FORAL6 ; local 0681 17 ral 0682 DABC06 jc FORAL6 ; "already did" flag 0685 23 inx h 0686 79 mov a,c 0687 FEFF cpi 0ffh 0689 CA9406 jz FORAL2 068C BE cmp m 068D CA9506 jz FORAL3 0690 2B dcx h 0691 C3BC06 jmp FORAL6 FORAL2: 0694 4E mov c,m FORAL3: 0695 2B dcx h 0696 7E mov a,m 0697 F640 ori 040h ; mark this one done... 0699 77 mov m,a 069A E3 xthl 069B CDD006 call RHLR0 069E D2C706 jnc FORAL7 06A1 E3 xthl 06A2 7E mov a,m 06A3 E60F ani 00fh 06A5 3C inr a 06A6 E5 push h 06A7 210100 lxi h,1 FORAL4: 06AA 3D dcr a 06AB CAB206 jz FORAL5 06AE 29 dad h 06AF C3AA06 jmp FORAL4 FORAL5: 06B2 7B mov a,e 06B3 B5 ora l 06B4 5F mov e,a 06B5 7A mov a,d 06B6 B4 ora h 06B7 57 mov d,a 06B8 E1 pop h 06B9 C3C806 jmp FORAL8 FORAL6: 06BC E3 xthl 06BD CDD006 call RHLR0 06C0 D2C706 jnc FORAL7 06C3 7C mov a,h 06C4 F680 ori 080h 06C6 67 mov h,a FORAL7: 06C7 E3 xthl FORAL8: 06C8 23 inx h 06C9 23 inx h 06CA 05 dcr b 06CB C27C06 jnz FORAL1 06CE E1 pop h 06CF C9 ret RHLR0: 06D0 B7 ora a 06D1 7C mov a,h 06D2 1F rar 06D3 67 mov h,a 06D4 7D mov a,l 06D5 1F rar 06D6 6F mov l,a 06D7 C9 ret ; Reset from FORALL RSTALL: 06D8 210200 lxi h,CFGTBL+BSDSKS 06DB 0610 mvi b,16 RSTAL1: 06DD 7E mov a,m 06DE E68F ani 08fh ; clear FORALL iterator flag(s) 06E0 77 mov m,a 06E1 23 inx h 06E2 23 inx h 06E3 05 dcr b 06E4 C2DD06 jnz RSTAL1 06E7 C9 ret STSF: ; setup Search First 06E8 3EFF mvi a,0ffh 06EA 325F00 sta CURSID ; assume local 06ED 2AA601 lhld PARAMT 06F0 7E mov a,m 06F1 FE3F cpi '?' 06F3 C20107 jnz STSF1 06F6 CD1E05 call CKSTDK 06F9 0EBF mvi c,'?'+080h ; "drive" code with CP/M3 flag 06FB CD7004 call STFCB 06FE C30B07 jmp STSF2 STSF1: 0701 2AA901 lhld MCRPNT 0704 23 inx h 0705 22A901 shld MCRPNT 0708 CD6D04 call CKSFCB ; if remote, set FCB in msg STSF2: 070B 3A6300 lda MSGID 070E 325F00 sta CURSID 0711 CD1C02 call SETSRA 0714 C3D703 jmp SNDHDR STSN: ; setup Search Next 0717 3A5F00 lda CURSID 071A FEFF cpi 0ffh ; was Search First a local op? 071C C22507 jnz STSN1 071F CD2A04 call TBDOSP 0722 C31004 jmp NDEND STSN1: 0725 326300 sta MSGID 0728 CD1502 call CURUSR 072B 2AA901 lhld MCRPNT 072E 23 inx h 072F 77 mov m,a 0730 23 inx h 0731 22A901 shld MCRPNT 0734 C3D703 jmp SNDHDR RCVEC: 0737 CD1904 call RCVPAR 073A 216800 lxi h,MSGDAT+1 073D 22A901 shld MCRPNT 0740 56 mov d,m ; D = ext err code 0741 2B dcx h 0742 7E mov a,m 0743 32A801 sta RETCOD 0746 2B dcx h 0747 7E mov a,m ; SIZ 0748 3D dcr a 0749 2600 mvi h,0 ; ensure H=0 to avoid confusion with extended errors 074B C0 rnz ; not extended error - skip rest 074C CD0702 call BDERMD 074F 3C inr a 0750 C25707 jnz NDERR 0753 EB xchg 0754 C30D04 jmp NDENDR NDERR: 0757 D5 push d 0758 114900 lxi d,NDERRM 075B CD8B07 call PRMSG 075E F1 pop psw ; A = (D), ext err code 075F F5 push psw ; Fix bug in NDOS.ASM 0760 CD7B07 call HEXOUT 0763 115500 lxi d,NDERR2 0766 CD8B07 call PRMSG 0769 3AA501 lda FUNCOD 076C CD7B07 call HEXOUT 076F CD0702 call BDERMD 0772 E1 pop h ; H = ext err code 0773 FEFE cpi 0feh 0775 CA0D04 jz NDENDR 0778 C30000 jmp TOP ; abort program HEXOUT: 077B 11B101 lxi d,HEXMSG+1 ; do low nibble first 077E F5 push psw 077F CDDA04 call HEXDIG 0782 F1 pop psw 0783 1F rar 0784 1F rar 0785 1F rar 0786 1F rar 0787 1B dcx d ; back to hi nibble 0788 CDDA04 call HEXDIG PRMSG: 078B 0E09 mvi c,CBUFPR 078D C30900 jmp next GTFCB: 0790 3AAC01 lda F5SETF 0793 3C inr a 0794 C29C07 jnz GTFCCR GTFCRR: 0797 0623 mvi b,35 ; FCB+CR+RR (-drive) 0799 C39E07 jmp GTFC1 GTFCCR: 079C 0620 mvi b,32 ; FCB+CR, not RR GTFC1: 079E CDBD07 call RSTMP ; un-do temp file subst 07A1 2AA901 lhld MCRPNT 07A4 23 inx h 07A5 EB xchg 07A6 2AA601 lhld PARAMT 07A9 23 inx h 07AA CDB007 call MCPYFS 07AD 2600 mvi h,0 ; ensure H=0 to avoid confusion with extended errors 07AF C9 ret MCPYFS: 07B0 1A ldax d 07B1 77 mov m,a 07B2 13 inx d 07B3 23 inx h 07B4 05 dcr b 07B5 C2B007 jnz MCPYFS 07B8 EB xchg 07B9 22A901 shld MCRPNT 07BC C9 ret RSTMP: ; restore TMP filename 07BD 3AAD01 lda FNTMPF 07C0 1F rar 07C1 1F rar 07C2 D2CF07 jnc RSTMP1 07C5 2AA901 lhld MCRPNT 07C8 23 inx h 07C9 23 inx h 07CA 3624 mvi m,'$' 07CC 23 inx h 07CD 3624 mvi m,'$' RSTMP1: 07CF 17 ral 07D0 D0 rnc 07D1 2AA901 lhld MCRPNT 07D4 110A00 lxi d,10 07D7 19 dad d 07D8 3624 mvi m,'$' 07DA 23 inx h 07DB 3624 mvi m,'$' 07DD C9 ret GTDIRE: 07DE 3AA801 lda RETCOD 07E1 3C inr a 07E2 2600 mvi h,0 ; ensure H=0 to avoid confusion with extended errors 07E4 C8 rz 07E5 2AA901 lhld MCRPNT ; Special case for CP/M3 full search, although really ; any SEARCH that wants to be fully compatible with CP/M ; neuances - specifically that the DMA buffer contains the ; full directory sector after a search. ; ; CP/Net breaks SEARCH funcs 17/18 by only returning ; one DIRENT at a time, while the local BDOS calls ; actually fill the DMA buffer with the directory sector. ; DIR.COM depends on this for getting timestamps. 07E8 3A6600 lda MSGSIZ 07EB B7 ora a ; 00 = 1 byte, dir code only, DMA buf implied 07EC C8 rz ; NDENDR will return dir code to user 07ED FE24 cpi 32+4 ; anything 1 < x < 128 really, pick a number (expect 32). 07EF D21208 jnc STOSC0 ; assume 128 bytes, copy all to DMA buffer. ; single DIRENT returned, copy to correct location. 07F2 EB xchg 07F3 2AB809 lhld DMAADR 07F6 3AA801 lda RETCOD 07F9 3C inr a 07FA 012000 lxi b,32 GTDIR1: 07FD 3D dcr a 07FE CA0508 hes faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk jz GTDIR2 0801 09 dad b 0802 C3FD07 jmp GTDIR1 GTDIR2: 0805 41 mov b,c 0806 CDB007 call MCPYFS 0809 C9 ret GTOSCT: 080A 3AA801 lda RETCOD 080D B7 ora a 080E C0 rnz 080F 218C00 lxi h,MSGDAT+37 STOSC0: 0812 EB xchg 0813 2AB809 lhld DMAADR 0816 0680 mvi b,SCTLNG 0818 CDB007 call MCPYFS 081B 2600 mvi h,0 ; ensure H=0 to avoid confusion with extended errors 081D C9 ret GTMISC: 081E 2AA901 lhld MCRPNT 0821 2B dcx h ; drop error byte 0822 3AA501 lda FUNCOD 0825 FE1B cpi CGTALL ; get alloc addr 0827 CA5408 jz GTMSC3 ; for alloc vec, just leave in message buffer 082A EB xchg 082B FE2E cpi CFRSP ; get disk free space 082D CA3E08 jz GTMSC4 0830 FE1F cpi CGTDPB ; get DPB addr 0832 C24A08 jnz GTMSC1 ; fn 31 - get DPB 0835 21BA09 lxi h,CURDPB 0838 E5 push h 0839 0610 mvi b,16 ; should be 15 for CP/M 2.2, 17 for CP/M 3 083B C35008 jmp GTMSC2 GTMSC4: 083E 210000 lxi h,0 0841 E5 push h 0842 2AB809 lhld DMAADR 0845 0603 mvi b,3 0847 C35008 jmp GTMSC2 GTMSC1: ; fn 71 - get server config 084A 21C909 lxi h,CURSCF 084D E5 push h 084E 0617 mvi b,23 GTMSC2: 0850 CDB007 call MCPYFS 0853 E1 pop h GTMSC3: 0854 7D mov a,l 0855 32A801 sta RETCOD 0858 C9 ret GTLOGV: 0859 112100 lxi d,CFGTBL+BSDSKE 085C 210000 lxi h,0 085F 0610 mvi b,16 GTLGV1: 0861 1A ldax d 0862 1B dcx d 0863 4F mov c,a 0864 1A ldax d 0865 1B dcx d 0866 29 dad h 0867 CD7308 call DRVSTS 086A 05 dcr b 086B C26108 jnz GTLGV1 086E 7D mov a,l 086F 32A801 sta RETCOD 0872 C9 ret ; Get a drive's status (i.e. GET LOGIN VECTOR) ; B = local drive num ; A = net cfg byte, bit-7 = remote, bit-0:3 = remote drive num ; Returns DE bit-0 = drive's status DRVSTS: 0873 D5 push d 0874 C5 push b 0875 E5 push h 0876 17 ral 0877 DA8408 jc DRVST1 ; drive is local 087A C5 push b 087B CD2A04 call TBDOSP 087E C1 pop b 087F 05 dcr b 0880 EB xchg 0881 C3A008 jmp DRVST2 DRVST1: ; drive is remote 0884 1F rar 0885 E60F ani 00fh 0887 47 mov b,a ; remote drive number 0888 79 mov a,c ; server ID 0889 326300 sta MSGID 088C 216700 lxi h,MSGDAT 088F 22A901 shld MCRPNT 0892 C5 push b 0893 CDD703 call SNDHDR 0896 CD1904 call RCVPAR 0899 C1 pop b 089A 2AA901 lhld MCRPNT 089D 5E mov e,m 089E 23 inx h 089F 56 mov d,m DRVST2: ; DE = vector of active drives 08A0 78 mov a,b 08A1 B7 ora a 08A2 CAAF08 jz DRVST4 DRVST3: ; get drive 'B' bit to LSB 08A5 7A mov a,d 08A6 1F rar 08A7 57 mov d,a 08A8 7B mov a,e 08A9 1F rar 08AA 5F mov e,a 08AB 05 dcr b 08AC C2A508 jnz DRVST3 DRVST4: 08AF 1600 mvi d,000h 08B1 7B mov a,e 08B2 E601 ani 001h 08B4 5F mov e,a 08B5 E1 pop h 08B6 19 dad d 08B7 C1 pop b 08B8 D1 pop d 08B9 C9 ret SELDSK: 08BA 3AA601 lda PARAMT 08BD 1600 mvi d,000h 08BF 5F mov e,a 08C0 CD4F04 call CHKDSK 08C3 FEFF cpi 0ffh ; local disk 08C5 CA2A04 jz TBDOSP ; let BDOS handle 08C8 CD2902 call SETDSK 08CB 2AA901 lhld MCRPNT 08CE 0D dcr c 08CF 71 mov m,c 08D0 23 inx h 08D1 22A901 shld MCRPNT 08D4 CDD703 call SNDHDR 08D7 C33707 jmp RCVEC RESET: ; anything to do? BDOS will be called... but BDOS does not call 0005 (us)? 08DA 216700 lxi h,MSGDAT 08DD 22A901 shld MCRPNT ; A: cannot be remote... 08E0 C30900 jmp next LIST1: 08E3 11A601 lxi d,PARAMT 08E6 010100 lxi b,1 08E9 C3F908 jmp lstbk2 LSTBLK: 08EC 2AA601 lhld PARAMT 08EF 5E mov e,m 08F0 23 inx h 08F1 56 mov d,m ; address of data 08F2 23 inx h 08F3 4E mov c,m 08F4 23 inx h 08F5 46 mov b,m ; length 08F6 79 mov a,c 08F7 B0 ora b 08F8 C8 rz lstbk2: lxix CFGTBL+BSLIST 08F9+DD21 DB 0DDH,21H 08FB+2400 DW CFGTBL+BSLIST bitx 7,+0 08FD+DDCB007E DB 0DDH,0CBH,+0,7*8+46H 0901 CA2604 jz tnextp 0904 212D00 lxi h,CFGTBL+BSLIST+9 0907 D5 push d ldx e,+7 0908+DD5E07 DB 0DDH,E*8+46H,+7 090B 1600 mvi d,0 090D 19 dad d 090E D1 pop d lstbk0: 090F 1A ldax d 0910 13 inx d 0911 77 mov m,a 0912 23 inx h inrx +7 ; dirty == not-zero 0913+DD3407 DB 0DDH,34H,+7 0916 FA2509 jm lstbk3 ; send data 0919 FEFF cpi 0ffh ; stop at 0ffh? or need to continue if more? 091B CA2509 jz lstbk3 ; this will continue if more chars exist... lstbk1: 091E 0B dcx b 091F 78 mov a,b 0920 B1 ora c 0921 C20F09 jnz lstbk0 0924 C9 ret lstbk3: ; must send buffer ldx a,+0 0925+DD7E00 DB 0DDH,A*8+46H,+0 0928 E60F ani 0fh stx a,+8 092A+DD7708 DB 0DDH,70H+A,+8 ; SIZ already len-1, incl LST unit ldx a,+1 ; LST server 092D+DD7E01 DB 0DDH,A*8+46H,+1 stx a,+4 ; DID 0930+DD7704 DB 0DDH,70H+A,+4 0933 D5 push d 0934 C5 push b pushix 0935+DDE5 DB 0DDH,0E5H 0937 012700 lxi b,CFGTBL+BSLIST+3 ; MSG buffer 093A CD0000 call SNDMSG popix 093D+DDE1 DB 0DDH,0E1H pushix 093F+DDE5 DB 0DDH,0E5H mvix 0,+7 ; clear dirty flag, setup for next char 0941+DD360700 DB 0DDH,36H,+7,0 0945 3C inr a 0946 CA0604 jz NERROR 0949 016200 lxi b,MSGTOP 094C CD0104 call RVMSGE popix 094F+DDE1 DB 0DDH,0E1H 0951 C1 pop b 0952 D1 pop d 0953 212D00 lxi h,CFGTBL+BSLIST+9 0956 C31E09 jmp lstbk1 GETVER: 0959 2A6000 lhld scbadr 095C 2EA1 mvi l,scbase+05h 095E 6E mov l,m 095F 2602 mvi h,002h 0961 7D mov a,l 0962 32A801 sta RETCOD 0965 C9 ret NWSTAT: 0966 CD0000 call NTWKST 0969 32A801 sta RETCOD 096C C9 ret NWCFTB: 096D CD0000 call CNFTBL 0970 7D mov a,l 0971 32A801 sta RETCOD 0974 C9 ret LOGIN: 0975 2AA601 lhld PARAMT 0978 7E mov a,m 0979 326300 sta MSGID 097C 23 inx h 097D EB xchg 097E 2AA901 lhld MCRPNT 0981 0608 mvi b,8 0983 CDF304 call MCPYTS 0986 C3D703 jmp SNDHDR LOGOFF: 0989 3AA601 lda PARAMT 098C 326300 sta MSGID 098F C3D703 jmp SNDHDR SDMSGU: 0992 2AA601 lhld PARAMT 0995 44 mov b,h 0996 4D mov c,l 0997 CD0000 call SNDMSG 099A 32A801 sta RETCOD 099D C9 ret RVMSGU: 099E 2AA601 lhld PARAMT 09A1 44 mov b,h 09A2 4D mov c,l 09A3 CD0000 call RCVMSG 09A6 32A801 sta RETCOD 09A9 C9 ret LDERR: 09AA 3EFF mvi a,-1 09AC E1 pop h 09AD C9 ret 09AE 0000 SAVDMA: dw 0 09B0 000000 SAVRR: db 0,0,0 09B3 0000 MSCRET: dw 0 09B5 0000 MSCTBP: dw 0 09B7 00 CURMSC: db 0 09B8 0000 DMAADR: dw 0 09BA CURDPB: ds 15 09C9 CURSCF: ds 23 ; this is used to do warm boot initialization, since most ; programs do not call BDOS Function 0 but instead just ; JMP 0. The CCP then makes this call, either upon startup ; and/or immediately prior to running a program. ; Perportedly, the CPP calls this with DE=NULL in order ; to scrub RSXs on warm boot. LDOVLY: WARMST: 09E0 D5 push d 09E1 C5 push b 09E2 CD0000 call NTWKBT ; TODO: any other re-init? reset some context? ; lxi d,wbmsg ; mvi c,CBUFPR ; call next 09E5 C1 pop b 09E6 D1 pop d 09E7 C30900 jmp next ; An example of how to process BDOS Func 60 RSX Func 113 ; and remove one's self. CALRSX: 09EA 6B mov l,e 09EB 62 mov h,d 09EC 7E mov a,m 09ED 23 inx h 09EE FE71 cpi 113 ; Check for RSX Func 113 09F0 C20900 jnz next 09F3 7E mov a,m 09F4 23 inx h 09F5 FE01 cpi 1 ; Check param count to be sure 09F7 C20900 jnz next 09FA D5 push d 09FB 5E mov e,m 09FC 23 inx h 09FD 56 mov d,m 09FE 211000 lxi h,rsxnam 0A01 0608 mvi b,8 rsxf0: ; Compare paramter to our name 0A03 1A ldax d 0A04 BE cmp m 0A05 C20E0A jnz rsxf1 0A08 13 inx d 0A09 23 inx h 0A0A 05 dcr b 0A0B C2030A jnz rsxf0 rsxf1: 0A0E D1 pop d 0A0F C20900 jnz next 0A12 115502 lxi d,CSTDN 0A15 0E09 mvi c,CBUFPR 0A17 CD0900 call next 0A1A 210900 lxi h,next 0A1D 220700 shld start+1 ; only until remove takes place... 0A20 3EFF mvi a,0ffh 0A22 320E00 sta remove 0A25 210000 lxi h,0 0A28 7D mov a,l 0A29 C9 ret 0A2A end 0BD8 NTWKIN 0BF4 NTWKST 0BFF CNFTBL 0C03 SNDMSG 0C25 RCVMSG 0C4A NTWKBT 0B2A CFGTBL 0C49 NTWKER !g"*  " :!ڬ*! 4¬#4¬#4!q* * :!: * *! s#r#w>!2e!g"g: _g ry 2c**:8s*ry <:%O 22c!gs#r#":&k=!:g2<!7!!,  ~Ҽڼ#yʔʕ+üN+~@w~2_*~?p 1E CKSTDK 0518 CKSTDP 01B3 CLDERR 0040 CLOGIN 0041 CLOGOF 0070 CLSBLK 0000 CNFTBL 0048 CNMAX 0040 CNMIN 01BC COLDSE 01D4 COLDST 000F COPEN 003B COVLY 000D CR 000A CRDBUF 0014 CREAD 0021 CRREAD 000D CRSDSK 0025 CRSDSN 003C CRSX 0022 CRWRIT 0011 CSRFST 0012 CSRNXT 001A CSTDMA 0255 CSTDN 0244 CSTUP 0020 CSTUSC 09BA CURDPB 0233 CURDSK 09B7 CURMSC 09C9 CURSCF 005F CURSID 0215 CURUSR 0015 CWRITE 0062 CXMIN 0002 DE 023A DMAADD 09B8 DMAADR 0884 DRVST1 08A0 DRVST2 08A5 DRVST3 08AF DRVST4 0873 DRVSTS 001A EOF 01AC F5SETF 0021 FCBRR0 004A FDKMS 0009 FDLFI 0020 FGTAL 0048 FGTDL 0034 FGTSZ 0001 FGTVR 003C FLGIN 003E FLGOF 001F FLGVC 0037 FLKRC 004E FLST1 004F FLSTBK 01AD FNTMPF 0043 FNWCF 0042 FNWST 0005 FOPFI 067C FORAL1 0694 FORAL2 0695 FORAL3 06AA FORAL4 06B2 FORAL5 06BC FORAL6 06C7 FORAL7 06C8 FORAL8 0672 FORALL 002A FRDRR 0011 FRDSQ 001B FREFI 0002 FRSSY 0003 FRSVC 0041 FRVNW 0040 FSDNW 0004 FSLDK 000B FSRFS 000E FSRNX 0044 FSTCP 0027 FSTFI 003B FSTPW 0045 FSVCF 01A5 FUNCOD 0380 FUNTB1 0330 FUNTB2 02E6 FUNTB3 03C1 FUNTBN 03C9 FUNTBS 03B2 FUNTBX 0024 FWRPR 002F FWRRR 0016 FWRSQ 0959 GETVER 07FD GTDIR1 0805 GTDIR2 07DE GTDIRE 079E GTFC1 0790 GTFCB 079C GTFCCR 0797 GTFCRR 0861 GTLGV1 0859 GTLOGV 081E GTMISC 084A GTMSC1 0850 GTMSC2 0854 GTMSC3 083E GTMSC4 080A GTOSCT 04E5 HEXDG1 04DA HEXDIG 01B0 HEXMSG 077B HEXOUT 0004 HL 0004 IX 0004 IY 09AA LDERR 09E0 LDOVLY 00FF LEOF 000A LF 08E3 LIST1 0018 LOADER 0975 LOGIN 0989 LOGOFF 090F LSTBK0 091E LSTBK1 08F9 LSTBK2 0925 LSTBK3 08EC LSTBLK 01AB LSTUNT 07B0 MCPYFS 04F3 MCPYTS 01A9 MCRPNT 09B3 MSCRET 09B5 MSCTBP 0067 MSGDAT 0065 MSGFUN 0063 MSGID 0066 MSGSIZ 0062 MSGTOP 0410 NDEND 040D NDENDR 0757 NDERR 0055 NDERR2 0049 NDERRM 0265 NDOSE 0282 NDOSE1 0297 NDOSE2 02C1 NDOSE4 02CA NDOSE5 02E4 NDOSE6 0406 NERROR 0009 NEXT 0032 NFTB1 0008 NFTBN 000F NFTBX 000F NONBANK 0000 NTWKBT 0000 NTWKIN 0000 NTWKST 096D NWCFTB 0966 NWSTAT 01AE ORGBIO 01A6 PARAMT 000C PREV 078B PRMSG 0737 RCVEC 0000 RCVMSG 0419 RCVPAR 000E REMOVE 04E9 RENTMP 08DA RESET 01A8 RETCOD 06D0 RHLR0 06DD RSTAL1 06D8 RSTALL 07BD RSTMP 07CF RSTMP1 0A03 RSXF0 0A0E RSXF1 0010 RSXNAM 0401 RVMSGE 099E RVMSGU 09AE SAVDMA 09B0 SAVRR 0205 SCBADD 0060 SCBADR 009C SCBASE 0031 SCBF 0080 SCTLNG 03F9 SDMSGE 0992 SDMSGU 08BA SELDSK 0000 SERIAL 0229 SETDSK 021C SETSRA 0467 SNDFCB 03F6 SNDHD1 03D7 SNDHDR 0000 SNDMSG 01A3 STACK 0006 START 0521 STDSK0 0532 STDSK1 0470 STFCB 0812 STOSC0 06E8 STSF 0701 STSF1 070B STSF2 0717 STSN 0725 STSN1 04AB SUBTM1 0493 SUBTMP 0080 SYSDMA 020E SYSMSC 042A TBDOSP 0426 TNEXTP 0000 TOP 0100 TPA 01A3 USTACK 09E0 WARMST 04FF WTDTC2 0504 WTDTC8 0509 WTDTCP 050B WTDTCS  0037 FLKRC 004E FLST1 004F FLSTBK 01AD FNTMPF 0043 FNWCF 0042 FNWST 0005 FOPFI 067C FORAL1 0694 FORAL2 0695 FORAL3 06AA FORAL4 06B2 FORAL5 06BC FORAL6 06C7 FORAL7 06C8 FORAL8 0672 FORALL 002A FRDRR 0011 FRDSQ 001B FREFI 0002 FRSSY 0003 FRSVC 0041 FRVNW 0040 FSDNW 0004 FSLDK 000B FSRFS 000E FSRNX 0044 FSTCP 0027 FSTFI 003B FSTPW 0045 FSVCF 01A5 FUNCOD 0380 FUNTB1 0330 FUNTB2 ; SNIOS for fictitious CPNetDevice ; maclib z80 public NTWKIN, NTWKST, CNFTBL, SNDMSG, RCVMSG, NTWKER, NTWKBT, CFGTBL cseg ; Slave Configuration Table CFGTBL: 0000 ds 1 ; network status byte 0001 ds 1 ; slave processor ID number 0002 ds 2 ; A: Disk device +2 0004 ds 2 ; B: " 0006 ds 2 ; C: " 0008 ds 2 ; D: " 000A ds 2 ; E: " 000C ds 2 ; F: " 000E ds 2 ; G: " 0010 ds 2 ; H: " 0012 ds 2 ; I: " 0014 ds 2 ; J: " 0016 ds 2 ; K: " 0018 ds 2 ; L: " 001A ds 2 ; M: " 001C ds 2 ; N: " 001E ds 2 ; O: " 0020 ds 2 ; P: " 0022 ds 2 ; console device +34 0024 d. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTs 2 ; list device: +36... 0026 ds 1 ; buffer index +2 0027 00 db 0 ; FMT +3 0028 00 db 0 ; DID +4 0029 FF db 0ffh ; SID (CP/NOS must still initialize) 002A 05 db 5 ; FNC +6 002B 00 db 0 ; SIZ +7 002C ds 1 ; MSG(0) List number +8 002D ds 128 ; MSG(1) ... MSG(128) +9... 00AD 38 ioport: db 038h ; possibly configured here... ; Network Status Byte Equates ; 0010 = active equ 0001$0000b ; slave logged in on network 0002 = rcverr equ 0000$0010b ; error in received message 0001 = senderr equ 0000$0001b ; unable to send message ; Utility Procedures ; ; Network Initialization NTWKIN: lxix CFGTBL 00AE+DD21 DB 0DDH,21H 00B0+0000 DW CFGTBL 00B2 3E10 mvi a,active stx a,+0 ; network status byte 00B4+DD7700 DB 0DDH,70H+A,+0 00B7 3AAD00 lda ioport 00BA 4F mov c,a 00BB 0C inr c ; status port 00BC AF xra a outp a 00BD+ED79 DB 0EDH,A*8+41H 00BF 0D dcr c inp a 00C0+ED78 DB 0EDH,A*8+40H stx a,+1 ; our slave (client) ID 00C2+DD7701 DB 0DDH,70H+A,+1 00C5 AF xra a 00C6 322B00 sta CFGTBL+36+7 00C9 C9 ret ; Network Status NTWKST: 00CA 3A0000 lda CFGTBL+0 00CD 47 mov b,a 00CE E6FC ani not (rcverr+senderr) 00D0 320000 sta CFGTBL+0 00D3 78 mov a,b 00D4 C9 ret ; Return Configuration Table Address ; Still need this for BDOS func 69 CNFTBL: 00D5 210000 lxi h,CFGTBL 00D8 C9 ret ; Send Message on Network SNDMSG: ; BC = message addr 00D9 60 mov h,b 00DA 69 mov l,c ; HL = message address 00DB E5 push h popix 00DC+DDE1 DB 0DDH,0E1H 00DE 3A0100 lda CFGTBL+1 stx a,+2 ; Set Slave ID in header 00E1+DD7702 DB 0DDH,70H+A,+2 00E4 3AAD00 lda ioport 00E7 4F mov c,a 00E8 0605 mvi b,5 ; length of header outir 00EA+EDB3 DB 0EDH,0B3H ldx b,+4 ; msg siz field (-1) 00EC+DD4604 DB 0DDH,B*8+46H,+4 00EF 04 inr b ; might be 0, but that means 256 outir 00F0+EDB3 DB 0EDH,0B3H 00F2 0C inr c ; status port inp a ; 00F3+ED78 DB 0EDH,A*8+40H 00F5 E602 ani 02h ; cmd overrun 00F7 C8 rz 00F8 3EFF mvi a,0ffh 00FA C9 ret ; Receive Message from Network RCVMSG: ; BC = message addr 00FB 60 mov h,b 00FC 69 mov l,c ; HL = message address 00FD E5 push h popix 00FE+DDE1 DB 0DDH,0E1H 0100 3AAD00 lda ioport 0103 4F mov c,a 0104 0C inr c ; status port rcvwait: inp a 0105+ED78 DB 0EDH,A*8+40H 0107 E601 ani 01h ; data ready 0109 CA0501 jz rcvwait 010C 0D dcr c ; data port 010D 0605 mvi b,5 ; header length inir 010F+EDB2 DB 0EDH,0B2H ; Could compare SLVID with "LDX r,1" and ignore messages. ; But this "hardware" is point-to-point (connection oriented) ; so the only messages we see are intended for us. ldx b,+4 ; msg siz 0111+DD4604 DB 0DDH,B*8+46H,+4 0114 04 inr b inir 0115+EDB2 DB 0EDH,0B2H 0117 0C inr c ; status port inp a 0118+ED78 DB 0EDH,A*8+40H 011A E604 ani 04h ; rsp overrun 011C C8 rz 011D 3EFF mvi a,0ffh NTWKER: 011F C9 ret NTWKBT: ; NETWORK WARM START 0120 3AAD00 lda ioport 0123 4F mov c,a 0124 AF xra a ; Future hardware might expect data outp a 0125+ED79 DB 0EDH,A*8+41H inp a ; this is our Slave ID, but we already have it 0127+ED78 DB 0EDH,A*8+40H 0129 C9 ret 012A end 0010 ACTIVE 0000 BC 0000 CFGTBL 00D5 CNFTBL 0002 DE 0004 HL 00AD IOPORT 0004 IX 0004 IY 0120 NTWKBT 011F NTWKER 00AE NTWKIN 00CA NTWKST 0002 RCVERR 00FB RCVMSG 0105 RCVWAIT 0001 SENDERR 00D9 SNDMSG  ani 02h ; cmd overrun 00F7 C8 rz 00F8 3EFF mvi a,0ffh 00FA C9 ret ; Receive Message from Network RCVMSG: ; BC = message addr 00FB 60 mov h,b 00FC 69 mov֎ dEt9Q]-MRCNFTBLӑTe$5d4x9Q]-JNTWKBTё% Rh Z- KB %@ hp@Z$- KF %@ hZD-$ KI -- ր >7Nխ '5xn*+ d P $C@ &KP:0ڳnGj<9L`4[խ '0A@A`+d# Ր1xs$uk@ ixdk2rZJtw('*+Gu@2r2dwd)"&~2j2  ¼!e"2!g"1 "`D  : *`.~*`.~*`.~**`.s#r*`.:w*`.~*`.~#foNDOS3 Started. $NDOS3 Ending. $y22e ; < 2 !y ##ڗ##~‚ s1O~#fo":" !f6 #"GW ^&! !0 W_z !^#V! gm 7  Y Y f m u  ?@BHH HH <>>FF N    $' */44/ 77 J D D HH ; O<>@ABCDE 2@b !b6 #####*O> G }++sb <% $# ¹!4:+ Gx 07*Ów#"  * *:!3_ O2*2c* q#"52 " " :!ڬ*! ^#V#~2 " ì:¸: =2 ʸ!g"*  " :!ڬ*! 4¬#4¬#4!q* * :!: * *! s#r#w>!2e!g"g: _g ry 2c**:8s*ry <:%O 22c!gs#r#":&k=!:g2<!7!!,  ~Ҽڼ#yʔʕ+üN+~@w~2_*~?p S,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespe*#"m:c2_:_%*2c*#w#"!h"V+~2+~=&  J ! P ! * P ! Ͱ}2K ! O)s a }2ڄ *à Gy2c!g"*^#Vxʯ zW{_¥  {_: _O*)* q#"7!g"  *^#V#N#Fy!N ~&!W ^ w#4% % x ~ w~wQ  6 <b!W  *`.n&}2 2 }2*~2c#*:2c*DM 2*DM% 2> J kb~#q ~# ^#V! # U ! ">2! }  8!* >w : O y xw2U :* G2* x!* `i:+ w: OF x>`i: O x/ F x>: Oyx B"I !@  BB$$  UUUUUTUUE @ @ H @I$ $@  $I$IH"$$ D"I HHB"!$@$ $"IH"@$H @   $BI$I"$$A@!"  DD A H! D@DD !$I$   H HH @ @HI  "@   ɀ T NDOS3   NDOS3 COPYRIGHT (C) 1980-82, DIGITAL RESEARCH NDOS Err $, Func $ $Init err$ ! ">2  ¼!e"2!g"1 "`D  : *`.~*`.~*`.~**`.s#r*`.:w*`.~*`.~#foNDOS3 Started. $NDOS3 Ending. $y22e ; < 2 !y ##ڗ##~‚ s1O~#fo":" !f6 #"GW ^&! !0 W_z !^#V! gm 7  Y Y f m u  ?@BHH HH <>>FF N    $' */44/ 77 J D D HH ; O<>@ABCDE 2@b !b6 #####*O> G }++sb <% $# ¹!4:+ Gx 07*Ów#"  * *:!3_ O2*2c* q#"52 " " :!ڬ*! ^#V#~2 " ì:¸: =2 ʸ!g"*  " :!ڬ*! 4¬#4¬#4!q* * :!: * *! s#r#w>!2e!g"g: _g ry 2c**:8s*ry <:%O 22c!gs#r#":&k=!:g2<!7!!,  ~Ҽڼ#yʔʕ+üN+~@w~2_*~?p *#"m:c2_:_%*2c*#w#"!h"V+~2+~=&  J ! P ! * P ! Ͱ}2K ! O)s a }2ڄ *à Gy2c!g"*^#Vxʯ zW{_¥  {_: _O*)* q#"7!g"  *^#V#N#Fy!N ~&!W ^ w#4% % x ~ w~wQ  6 <b!W  *`.n&}2 2 }2*~2c#*:2c*DM 2*DM% 2> J kb~#q ~# ^#V! # U ! ">2! }  8!* >w : O y xw2U :* G2* x!* `i:+ w: OF x>`i: O x/ F x>: Oyx B"I !@  BB$$  UUUUUTUUE @ @ H @I$ $@  $I$IH"$$ D"I HHB"!$@$ $"IH"@$H @   $BI$I"$$A@!"  DD A H! D@DD !$I$   H HH @ @HI  "@    ; THIS PROGRAM CAN BE USED TO REMOVE AN RSX THAT IS PERSISTENT. ; THE RSX MUST TRAP FUNCTION 60 (CALL RSX) AND HONOR SUB FUNCTION 113. ; THE RSXPB IS DEFINED AS: ; ; RSXPB: DB 113 ; FUNCTION CODE ; DB 1 ; NUM PARAMS ; DB NAME ; PARAM: NAME OF RSX TO REMOVE ; ; NAME: DB 'TOREMOVE' ; MUST BE 8 CHARS, BLANK PADDED ; ; THIS PROGRAM EXPECTS THE CCP TO FORMAT THE SINGLE COMMANDLINE ; PARAMETER INTO THE DEFAULT FCB, WHICH WILL PRODUCE AN 8-CHAR ; (ACTUALLY, 11) BLANK PADDED FIELD. ; ; USAGE: RSXRM ; EXAMPLE: RSXRM RSXTEST ; ; A COMPATIBLE RSX MUST ACCEPT BDOS FUNCTION 60 RSX FUNCTION 113, ; COMPARE IT'S NAME TO THE PARAMETER, AND IF MATCHING THEN SET ; IT'S OWN REMOVE FLAG. ; ; SEE RSXTEST.ASM FOR AN EXAMPLE, IN THE RSXFUN ROUTINE. ; 0100 ORG 100H START: 0100 110B01 LXI D,RSXPB 0103 0E3C MVI C,60 0105 CD0500 CALL 5 0108 C30000 JMP 0 010B 71 RSXPB: DB 113 010C 01 DB 1 010D 5D00 DW 005DH 010F END 010B RSXPB 0100 START he parameter, and if matching then set ; it's own REMOVE flag. ; ; See RSXTEST.ASM for an example, in the RSXFUN routine. ; org 100h start: lxi d,rsxpb mvi c,60 call 5 jmp 0 rsxpb: db 113 db 1 dw 005dh end :0F010000110B010E3CCD0500C3000071015D0025 :0000000000 0 (CALL RSX) AND HONOR SUB FUNCTION 113. ; THE RSXPB IS DEFINED AS: ; ; RSXPB: DB 113 ; FUNCTION CODE ; DB 1 ; NUM PARAMS ; DB NAME ; PARAM: NAME OF RSX TO REMOVE ; ; NAME: DB 'TOREMOVE' ; MUST BE 8 CHARS, BLANK PADDED ; ; THIS Pc Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ; TRANSLATE TEXT FILE BETWEEN CP/M AND UNIX LINE-ENDS MACLIB Z80 0000 = WBOOT EQU 0000H 0005 = BDOS EQU 0005H 0080 = CMDLINE EQU 0080H 000D = CR EQU 13 000A = LF EQU 10 001A = EOF EQU 26 0002 = CONOUT EQU 2 0009 = PRINT EQU 9 000F = OPEN EQU 15 0010 = CLOSE EQU 16 0011 = SERFST EQU 17 0012 = SERNXT EQU 18 0013 = DELETE EQU 19 0014 = READ EQU 20 0015 = WRITE EQU 21 0016 = MAKE EQU 22 0017 = RENAME EQU 23 001A = SETDMA EQU 26 001E = SETATR EQU 30 0098 = PARSE EQU 152 0080 = BUFLEN EQU 128 0100 ORG 0100H 0100 C37901 JMP START 0103 INFILE: DS 36 0127 OUTFILE: DS 36 014B TMPFILE: DS 36 016F 00 SAWCR: DB 0 0170 00 CONV: DB 0 0171 00 BYTCNT: DB 0 0172 0000 FLPTR: DW 0 0174 00 FLCNT: DB 0 0175 0000 PFCB: DW 0 ; TEXT TO PARSE 0177 0000 DW 0 ; OUTPUT FCB ; TODO: SUPPORT THINGS LIKE A:=B:*.ASM[U] START: 0179 319805 LXI SP,STACK 017C 118000 LXI D,CMDLINE 017F 1A LDAX D 0180 13 INX D 0181 B7 ORA A 0182 CA4904 JZ HELP 0185 6F MOV L,A 0186 2600 MVI H,0 0188 19 DAD D 0189 3600 MVI M,0 ; ENSURE NUL TERMINATED 018B EB XCHG 018C 227501 SHLD PFCB 018F 212701 LXI H,OUTFILE 0192 227701 SHLD PFCB+2 0195 117501 LXI D,PFCB 0198 0E98 MVI C,PARSE 019A CD0500 CALL BDOS 019D 7C MOV A,H 019E A5 ANA L 019F FEFF CPI 0FFH 01A1 CA3104 JZ PARERR 01A4 7E MOV A,M ; HL POINT TO NEXT, UNPARSED, CHAR 01A5 FE3D CPI '=' 01A7 C23104 JNZ PARERR 01AA 23 INX H 01AB 227501 SHLD PFCB 01AE 210301 LXI H,INFILE 01B1 227701 SHLD PFCB+2 01B4 117501 LXI D,PFCB 01B7 0E98 MVI C,PARSE 01B9 CD0500 CALL BDOS 01BC 7C MOV A,H 01BD A5 ANA L 01BE FEFF CPI 0FFH 01C0 CA3104 JZ PARERR 01C3 7E MOV A,M ; HL POINT TO NEXT, UNPARSED, CHAR 01C4 FE5B CPI '[' 01C6 C23104 JNZ PARERR ; MAKE THIS OPTIONAL, DEFAULT IS NO CONVERSION? 01C9 23 INX H 01CA 7E MOV A,M 01CB E6DF ANI 0DFH ; TOUPPER 01CD FE55 CPI 'U' 01CF CAD701 JZ CONVOK 01D2 FE43 CPI 'C' 01D4 C23104 JNZ PARERR CONVOK: 01D7 E610 ANI 010H ; 0=TO-CP/M, ~0=TO-UNIX 01D9 327001 STA CONV 01DC 23 INX H 01DD 7E MOV A,M 01DE FE5D CPI ']' 01E0 C23104 JNZ PARERR 01E3 23 INX H 01E4 7E MOV A,M 01E5 B7 ORA A 01E6 C23104 JNZ PARERR 01E9 210301 LXI H,INFILE 01EC CD9B04 CALL CHKAFN 01EF D21C02 JNC MULTCP 01F2 3A2801 LDA OUTFILE+1 01F5 FE20 CPI ' ' 01F7 C20D02 JNZ NOBLANK 01FA 112801 LXI D,OUTFILE+1 01FD 210401 LXI H,INFILE+1 0200 010B00 LXI B,11 LDIR 0203+EDB0 DB 0EDH,0B0H 0205 3A2801 LDA OUTFILE+1 0208 FE20 CPI ' ' 020A CA3104 JZ PARERR NOBLANK: 020D 212701 LXI H,OUTFILE 0210 CD9B04 CALL CHKAFN 0213 D23104 JNC PARERR 0216 CDB902 CALL TRFILE ; ERRORS ABORT, DO NOT RETURN HERE 0219 C30000 JMP WBOOT MULTCP: 021C 3A2801 LDA OUTFILE+1 021F FE20 CPI ' ' 0221 C23104 JNZ PARERR ; MAKE LIST OF MATCHING FILES, THEN ; TRANSLATE EACH ONE... 0224 219806 LXI H,FLIST 0227 227201 SHLD FLPTR 022A AF XRA A 022B 327401 STA FLCNT 022E 111806 LXI D,INBUF 0231 0E1A MVI C,SETDMA 0233 CD0500 CALL BDOS 0236 110301 LXI D,INFILE 0239 0E11 MVI C,SERFST 023B CD0500 CALL BDOS 023E FEFF CPI 0FFH 0240 CA7904 JZ INOFILE SERLOOP: 0243 07 RLC 0244 07 RLC 0245 07 RLC 0246 07 RLC 0247 07 RLC ; * 32 0248 5F MOV E,A 0249 1600 MVI D,0 024B 211806 LXI H,INBUF 024E 19 DAD D 024F 23 INX H 0250 EB XCHG 0251 2A7201 LHLD FLPTR 0254 EB XCHG 0255 010B00 LXI B,11 LDIR 0258+EDB0 DB 0EDH,0B0H 025A EB XCHG 025B 3624 MVI M,'$' 025D 23 INX H 025E 227201 SHLD FLPTR 0261 3A7401 LDA FLCNT 0264 3C INR A 0265 327401 STA FLCNT 0268 110000 LXI D,0 026B 0E12 MVI C,SERNXT 026D CD0500 CALL BDOS 0270 FEFF CPI 0FFH 0272 C24302 JNZ SERLOOP ; GOT LIST OF 'FLCNT' FILES AT 'FLIST' ; THERE MUST BE AT LEAST ONE IF WE GET HERE... 0275 114105 LXI D,CPYING 0278 0E09 MVI C,PRINT 027A CD0500 CALL BDOS 027D 219806 LXI H,FLIST 0280 3A7401 LDA FLCNT FLOOP: 0283 F5 PUSH PSW 0284 E5 PUSH H 0285 114B05 LXI D,FPREFX 0288 0E09 MVI C,PRINT 028A CD0500 CALL BDOS 028D D1 POP D 028E D5 PUSH D 028F 0E09 MVI C,PRINT 0291 CD0500 CALL BDOS 0294 E1 POP H 0295 E5 PUSH H 0296 110401 LXI D,INFILE+1 0299 010B00 LXI B,11 LDIR 029C+EDB0 DB 0EDH,0B0H 029E 210401 LXI H,INFILE+1 02A1 112801 LXI D,OUTFILE+1 02A4 010B00 LXI B,11 LDIR 02A7+EDB0 DB 0EDH,0B0H 02A9 CDB902 CALL TRFILE 02AC E1 POP H 02AD F1 POP PSW 02AE 010C00 LXI B,12 02B1 09 DAD B 02B2 3D DCR A 02B3 C28302 JNZ FLOOP 02B6 C30000 JMP WBOOT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; TRANSLATE FILE INFILE => OUTFILE TRFILE: 02B9 AF XRA A 02BA 320F01 STA INFILE+12 02BD 323301 STA OUTFILE+12 02C0 212701 LXI H,OUTFILE 02C3 114B01 LXI D,TMPFILE 02C6 011000 LXI B,16 LDIR 02C9+EDB0 DB 0EDH,0B0H 02CB 215401 LXI H,TMPFILE+9 02CE 3624 MVI M,'$' 02D0 23 INX H 02D1 3624 MVI M,'$' 02D3 23 INX H 02D4 3624 MVI M,'$' ; FCBS ALL SETUP. 02D6 110301 LXI D,INFILE 02D9 0E0F MVI C,OPEN 02DB CD0500 CALL BDOS 02DE FEFF CPI 0FFH 02E0 CA7904 JZ INOFILE 02E3 AF XRA A 02E4 322301 STA INFILE+32 02E7 114B01 LXI D,TMPFILE 02EA 0E13 MVI C,DELETE 02EC CD0500 CALL BDOS 02EF 114B01 LXI D,TMPFILE 02F2 0E16 MVI C,MAKE 02F4 CD0500 CALL BDOS 02F7 FEFF CPI 0FFH 02F9 CA5404 JZ MKERR 02FC 326F01 STA SAWCR 02FF CDF603 CALL INFILL 0302 CDEA03 CALL OUTINIT CHRLOOP: 0305 CDA603 CALL GETCHR 0308 FE1A CPI EOF 030A CA4603 JZ INEOF 030D 1600 MVI D,0 030F FE0D CPI CR 0311 C21E03 JNZ NOTCR 0314 3A7001 LDA CONV 0317 B7 ORA A 0318 C20503 JNZ CHRLOOP ; TO-UNIX: DROP ALL CR 031B 14 INR D 031C 3E0D MVI A,CR 031E FE0A NOTCR: CPI LF 0320 C23A03 JNZ NOTLF 0323 3A7001 LDA CONV 0326 B7 ORA A 0327 C23803 JNZ CRLFOK ; TO-UNIX: DO NOT ADD BACK CR 032A 3A6F01 LDA SAWCR 032D B7 ORA A 032E C23803 JNZ CRLFOK 0331 3E0D MVI A,CR 0333 CDBD03 CALL PUTCHR 0336 1600 MVI D,0 CRLFOK: 0338 3E0A MVI A,LF NOTLF: 033A D5 PUSH D 033B CDBD03 CALL PUTCHR 033E D1 POP D 033F 7A MOV A,D 0340 326F01 STA SAWCR 0343 C30503 JMP CHRLOOP INEOF: 0346 3A7001 LDA CONV :03010000C37901BF :10016F000000000000000000000031980511800021 :10017F001A13B7CA49046F2600193600EB2275010E :10018F002127012277011175010E98CD05007CA55D :10019F00FEFFCA31047EFE3DC231042322750121C8 :1001AF0003012277011175010E98CD05007CA5FE84 :1001BF00FFCA31047EFE5BC23104237EE6DFFE55AB :1001CF00CAD701FE43C23104E610327001237EFE0E :1001DF005DC23104237EB7C23104210301CD9B04DC :1001EF00D21C023A2801FE20C20D0211280121045F :1001FF0001010B00EDB03A2801FE20CA310421277E :10020F0001CD9B04D23104CDB902C300003A2801BD :10021F00FE20C23104219806227201AF32740111FF :10022F0018060E1ACD05001103010E11CD0500FEA3 :10023F00FFCA790407070707075F16002118061979 :10024F0023EB2A7201EB010B00EDB0EB36242322D6 :10025F0072013A74013C3274011100000E12CD0587 :10026F0000FEFFC243021141050E09CD0500219882 :10027F00063A7401F5E5114B050E09CD0500D1D5F0 :10028F000E09CD0500E1E5110401010B00EDB021D0 :10029F000401112801010B00EDB0CDB902E1F1010C :1002AF000C00093DC28302C30000AF320F0132338D :1002BF0001212701114B01011000EDB0215401362E :1002CF00242336242336241103010E0FCD0500FEFF :1002DF00FFCA7904AF322301114B010E13CD050074 :1002EF00114B010E16CD0500FEFFCA5404326F01EB :1002FF00CDF603CDEA03CDA603FE1ACA46031600B8 :10030F00FE0DC21E033A7001B7C20503143E0DFE67 :10031F000AC23A033A7001B7C238033A6F01B7C243 :10032F0038033E0DCDBD0316003E0AD5CDBD03D11A :10033F007A326F01C305033A7001B7C259033E1AEF :10034F00CDBD033A5205B7C24D033A52054F3E8019 :10035F0091327101CDD603CD20043A7001B7CA8511 :10036F00033A7101326B012151017EF68077114BF7 :10037F00010E1ECD05001127010E13CD05002127FB :10038F0001115B01011000EDB0114B010E17CD05EE :10039F0000FEFFCA7304C93A5505B7CCF6033A55A8 :1003AF00053D3255052A56057E23225605C9F53AD5 :1003BF005205B7CCD6033A52053D325205F12A53B6 :1003CF00057723225305C91198050E1ACD05001183 :1003DF004B010E15CD0500B7C260042198052253BD :1003EF00053E80325205C91118060E1ACD050011AF :1003FF0003010E14CD0500B7CA1404FE01C25A043E :10040F003E1A3218062118062256053E803255052F :10041F00C9114B010E10CD05001103010E10CD05B2 :10042F0000C911A8040E09CD05001180001A136F21 :10043F0026001936240E09CD0500111B050E09CD16 :10044F000500C3000011F304C3630411B204C363B6 :10045F000411C604D5CD2004114B010E13CD050098 :10046F00D1C37C04110705C37C0411DB04D53A7496 :10047F0001B7CA92041E0D0E02CD05001E0A0E0210 :10048F00CD0500D10E09CD0500C30000060D7EFE7F :10049F003FC82305C29D0437C9496E76616C6964F4 :1004AF003A20244572726F722072656164696E67BB :1004BF0020696E707574244572726F72207772693D :1004CF0074696E67206F7574707574244E6F206633 :1004DF00696C6520666F756E6420666F7220696E39 :1004EF00707574244572726F7220637265617469DE :1004FF006E672074656D70244572726F722072651D :10050F006E616D696E672074656D70240D0A557389 :10051F006167653A20545220413A7B6F7574666962 :10052F006C657D3D423A696E66696C655B557C43CF :10053F005D24436F7079696E67202D240D0A20208A :09054F002020240000000000003F :0000000000  0349 B7 ORA A 034A C25903 JNZ DONE0 ; UNIX FILE, SET BYTE COUNT INSTEAD... INEOF0: 034D 3E1A MVI A,EOF 034F CDBD03 CALL PUTCHR ; FILL BUFFER AND FORCE FLUSH... 0352 3A5205 LDA OUTCNT 0355 B7 ORA A ; ZERO MEANS NEXT PUTCHR WILL FLUSH... 0356 C24D03 JNZ INEOF0 DONE0: 0359 3A5205 LDA OUTCNT 035C 4F MOV C,A 035D 3E80 MVI A,BUFLEN 035F 91 SUB C 0360 327101 STA BYTCNT ; 0..128 0363 CDD603 CALL OUTFLUSH ; FLUSHES FULL 128 BYTE RECORD DONE: ; CLOSE ALL AND RENAME TMPFILE... 0366 CD2004 CALL CLOSEALL 0369 3A7001 LDA CONV 036C B7 ORA A 036D CA8503 JZ ISCPM 0370 3A7101 LDA BYTCNT 0373 326B01 STA TMPFILE+32 0376 215101 LXI H,TMPFILE+6 0379 7E MOV A,M 037A F680 ORI 80H 037C 77 MOV M,A 037D 114B01 LXI D,TMPFILE 0380 0E1E MVI C,SETATR 0382 CD0500 CALL BDOS ; TRIM FILE BACK TO EXACT BYTE COUNT ; CHECK ERROR? ABORTING DOESN'T HELP ISCPM: 0385 112701 LXI D,OUTFILE 0388 0E13 MVI C,DELETE 038A CD0500 CALL BDOS ; CHECK ERROR? DO ANYTHING DIFFERENT? 038D 212701 LXI H,OUTFILE 0390 115B01 LXI D,TMPFILE+16 0393 011000 LXI B,16 LDIR 0396+EDB0 DB 0EDH,0B0H 0398 114B01 LXI D,TMPFILE 039B 0E17 MVI C,RENAME 039D CD0500 CALL BDOS 03A0 FEFF CPI 0FFH 03A2 CA7304 JZ RENERR 03A5 C9 RET GETCHR: 03A6 3A5505 LDA INCNT 03A9 B7 ORA A 03AA CCF603 CZ INFILL 03AD 3A5505 LDA INCNT 03B0 3D DCR A 03B1 325505 STA INCNT 03B4 2A5605 LHLD INPTR 03B7 7E MOV A,M 03B8 23 INX H 03B9 225605 SHLD INPTR 03BC C9 RET PUTCHR: 03BD F5 PUSH PSW 03BE 3A5205 LDA OUTCNT 03C1 B7 ORA A 03C2 CCD603 CZ OUTFLUSH 03C5 3A5205 LDA OUTCNT 03C8 3D DCR A 03C9 325205 STA OUTCNT 03CC F1 POP PSW 03CD 2A5305 LHLD OUTPTR 03D0 77 MOV M,A 03D1 23 INX H 03D2 225305 SHLD OUTPTR 03D5 C9 RET OUTFLUSH: 03D6 119805 LXI D,OUTBUF 03D9 0E1A MVI C,SETDMA 03DB CD0500 CALL BDOS 03DE 114B01 LXI D,TMPFILE 03E1 0E15 MVI C,WRITE 03E3 CD0500 CALL BDOS 03E6 B7 ORA A 03E7 C26004 JNZ OUTERR OUTINIT: 03EA 219805 LXI H,OUTBUF 03ED 225305 SHLD OUTPTR 03F0 3E80 MVI A,BUFLEN 03F2 325205 STA OUTCNT 03F5 C9 RET INFILL: 03F6 111806 LXI D,INBUF 03F9 0E1A MVI C,SETDMA 03FB CD0500 CALL BDOS 03FE 110301 LXI D,INFILE 0401 0E14 MVI C,READ 0403 CD0500 CALL BDOS 0406 B7 ORA A 0407 CA1404 JZ INOK 040A FE01 CPI 1 040C C25A04 JNZ INERR 040F 3E1A MVI A,EOF ; SHOULD NEVER HAPPEN FOR TEXT FILES, BUT HANDLE ANYWAY 0411 321806 STA INBUF INOK: 0414 211806 LXI H,INBUF 0417 225605 SHLD INPTR 041A 3E80 MVI A,BUFLEN 041C 325505 STA INCNT 041F C9 RET CLOSEALL: 0420 114B01 LXI D,TMPFILE 0423 0E10 MVI C,CLOSE 0425 CD0500 CALL BDOS 0428 110301 LXI D,INFILE 042B 0E10 MVI C,CLOSE 042D CD0500 CALL BDOS 0430 C9 RET PARERR: 0431 11A804 LXI D,PERRM 0434 0E09 MVI C,PRINT 0436 CD0500 CALL BDOS 0439 118000 LXI D,CMDLINE 043C 1A LDAX D 043D 13 INX D 043E 6F MOV L,A 043F 2600 MVI H,0 0441 19 DAD D 0442 3624 MVI M,'$' 0444 0E09 MVI C,PRINT 0446 CD0500 CALL BDOS HELP: 0449 111B05 LXI D,USAGE 044C 0E09 MVI C,PRINT 044E CD05 ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buff00 CALL BDOS 0451 C30000 JMP WBOOT MKERR: ; INFILE OPEN, PARTIAL CLEANUP 0454 11F304 LXI D,MERRM 0457 C36304 JMP ABORT INERR: ; BOTH FILES OPEN 045A 11B204 LXI D,IERRM 045D C36304 JMP ABORT OUTERR: ; BOTH FILES OPEN 0460 11C604 LXI D,OERRM ABORT: 0463 D5 PUSH D 0464 CD2004 CALL CLOSEALL 0467 114B01 LXI D,TMPFILE 046A 0E13 MVI C,DELETE 046C CD0500 CALL BDOS 046F D1 POP D 0470 C37C04 JMP ERRMSG RENERR: ; FILES ARE ALL CLOSED, NO CLEANUP 0473 110705 LXI D,RERRM 0476 C37C04 JMP ERRMSG INOFILE: ; FILES NOT OPEN YET, NO CLEANUP 0479 11DB04 LXI D,NERRM ERRMSG: 047C D5 PUSH D 047D 3A7401 LDA FLCNT 0480 B7 ORA A 0481 CA9204 JZ NOCRLF 0484 1E0D MVI E,CR 0486 0E02 MVI C,CONOUT 0488 CD0500 CALL BDOS 048B 1E0A MVI E,LF 048D 0E02 MVI C,CONOUT 048F CD0500 CALL BDOS NOCRLF: 0492 D1 POP D 0493 0E09 MVI C,PRINT 0495 CD0500 CALL BDOS 0498 C30000 JMP WBOOT ; CHECK FOR '?' (AMBIGUOUS FILE NAME) IN FCB HL ; RETURN CY SET IF UNAMBIGUOUS CHKAFN: 049B 060D MVI B,13 QCHK: 049D 7E MOV A,M 049E FE3F CPI '?' 04A0 C8 RZ 04A1 23 INX H 04A2 05 DCR B 04A3 C29D04 JNZ QCHK 04A6 37 STC 04A7 C9 RET 04A8 496E76616CPERRM: DB 'Invalid: $' 04B2 4572726F72IERRM: DB 'Error reading input$' 04C6 4572726F72OERRM: DB 'Error writing output$' 04DB 4E6F206669NERRM: DB 'No file found for input$' 04F3 4572726F72MERRM: DB 'Error creating temp$' 0507 4572726F72RERRM: DB 'Error renaming temp$' 051B 0D0A557361USAGE: DB CR,LF,'Usage: TR A:{outfile}=B:infile[U|C]$' 0541 436F707969CPYING: DB 'Copying -$' 054B 0D0A202020FPREFX: DB CR,LF,' $' 0552 00 OUTCNT: DB 0 0553 0000 OUTPTR: DW 0 0555 00 INCNT: DB 0 0556 0000 INPTR: DW 0 0598 = STACK EQU $+64 0598 = OUTBUF EQU STACK 0618 = INBUF EQU OUTBUF+BUFLEN 0698 = FLIST EQU INBUF+BUFLEN 0558 END 0463 ABORT 0000 BC 0005 BDOS 0080 BUFLEN 0171 BYTCNT 049B CHKAFN 0305 CHRLOOP 0010 CLOSE 0420 CLOSEALL 0080 CMDLINE 0002 CONOUT 0170 CONV 01D7 CONVOK 0541 CPYING 000D CR 0338 CRLFOK 0002 DE 0013 DELETE 0359 DONE0 0366 DONE 001A EOF 047C ERRMSG 0174 FLCNT 0698 FLIST 0283 FLOOP 0172 FLPTR 054B FPREFX 03A6 GETCHR 0449 HELP 0004 HL 04B2 IERRM 0618 INBUF 0555 INCNT 0346 INEOF 034D INEOF0 045A INERR 0103 INFILE 03F6 INFILL 0479 INOFILE 0414 INOK 0556 INPTR 0385 ISCPM 0004 IX 0004 IY 000A LF 0016 MAKE 04F3 MERRM 0454 MKERR 021C MULTCP 04DB NERRM 020D NOBLANK 0492 NOCRLF 031E NOTCR 033A NOTLF 04C6 OERRM 000F OPEN 0598 OUTBUF 0552 OUTCNT 0460 OUTERR 0127 OUTFILE 03D6 OUTFLUSH 03EA OUTINIT 0553 OUTPTR 0431 PARERR 0098 PARSE 04A8 PERRM 0175 PFCB 0009 PRINT 03BD PUTCHR 049D QCHK 0014 READ 0017 RENAME 0473 RENERR 0507 RERRM 016F SAWCR 0011 SERFST 0243 SERLOOP 0012 SERNXT 001E SETATR 001A SETDMA 0598 STACK 0179 START 014B TMPFILE 02B9 TRFILE 051B USAGE 0000 WBOOT 0015 WRITE  ; NTPDATE PROGRAM FOR KAYPRO CP/M 3 MACLIB Z80 0005 = BDOS EQU 0005H 0080 = CMDLN EQU 0080H ; BDOS FUNCTIONS 0002 = CONOUT EQU 2 0009 = PRINT EQU 9 000C = GETVER EQU 12 0031 = SGSCB EQU 49 ; CP/NET NDOS FUNCTIONS 0042 = NSEND EQU 66 0043 = NRECV EQU 67 0100 ORG 0100H 0100 C33402 JMP START 0103 38 IOPORT: DB 038H 0104 0000 VERS: DW 0 0106 0000 SCBADR: DW 0 0108 0000026900GETTIME: DB 0, 0, 2, 105, 0, 0 010E 0102006904GOTTIME: DB 1, 2, 0, 105, 4, 0, 0, 0, 0, 0 ; JUST PREDICTION OF WHAT WILL BE RECEIVED 0118 3A SCBPB: DB 03AH ; OFFSET OF SCB ADDRESS (RESERVED AREA) 0119 00 DB 0 ; GET WORD, (SCB ADDRESS) 011A 0000 DW 0 ; ASSUME < 100 DECOUT: 011C 0630 MVI B,'0' DECOT0: 011E D60A SUI 10 0120 DA2701 JC DECOT1 0123 04 INR B 0124 C31E01 JMP DECOT0 DECOT1: 0127 C60A ADI 10 0129 C630 ADI '0' 012B F5 PUSH PSW 012C 78 MOV A,B 012D CD5B01 CALL PROUT 0130 F1 POP PSW 0131 C35B01 JMP PROUT ; KEEPS NUMBER IN HL - CALLER MUST PRESERVE/INIT ; RETURNS CY FOR INVALID HEXNUM: 0134 D630 SUI '0' 0136 D8 RC 0137 FE0A CPI 9+1 0139 D24301 JNC HEXNM1 HEXNM2: 013C 29 DAD H 013D 29 DAD H 013E 29 DAD H 013F 29 DAD H 0140 B5 ORA L 0141 6F MOV L,A 0142 C9 RET HEXNM1: 0143 D608 SUI 'A'-'9' 0145 D8 RC 0146 FE06 CPI 5+1 0148 3F CMC 0149 D8 RC 014A C60A ADI 10 014C C33C01 JMP HEXNM2 HEXOUT: 014F F5 PUSH PSW 0150 0F RRC 0151 0F RRC 0152 0F RRC 0153 0F RRC 0154 CD5801 CALL HEXDIG 0157 F1 POP PSW HEXDIG: 0158 CD6101 CALL TOHEX PROUT: 015B 5F MOV E,A 015C 0E02 MVI C,CONOUT 015E C30500 JMP BDOS TOHEX: 0161 E60F ANI 0FH 0163 C690 ADI 90H 0165 27 DAA 0166 CE40 ACI 40H 0168 27 DAA 0169 C9 RET ; HL = CP/M DATE-TIME FIELD, W/O SECONDS ; PRINT DATE AND TIME TO CONSOLE. PRDATE: 016A 5E MOV E,M 016B 23 INX H 016C 56 MOV D,M 016D 23 INX H 016E E5 PUSH H ; COMPUTE YEAR 016F 0E4E MVI C,78 ; BASE YEAR, EPOCH, BINARY 0171 0678 MVI B,078H ; YEAR, BCD ; SPECIAL-CASE DATE=0... 0173 7B MOV A,E 0174 B2 ORA D 0175 C27901 JNZ PRDAT0 0178 13 INX D PRDAT0: 0179 216D01 LXI H,365 017C 79 MOV A,C 017D E603 ANI 03H ; NOT STRICTLY TRUE, BUT WORKS UNTIL YEAR 2100... 017F C28301 JNZ PRDAT1 0182 23 INX H 0183 E5 PRDAT1: PUSH H 0184 B7 ORA A DSBC D 0185+ED52 DB 0EDH,D*8+42H 0187 E1 POP H 0188 D29901 JNC PRDAT2 ; DONE COMPUTING YEAR... 018B EB XCHG 018C B7 ORA A DSBC D 018D+ED52 DB 0EDH,D*8+42H 018F EB XCHG 0190 0C INR C 0191 78 MOV A,B 0192 C601 ADI 1 0194 27 DAA 0195 47 MOV B,A 0196 C37901 JMP PRDAT0 PRDAT2: ; DE = DAYS WITHIN YEAR 'C' 0199 C5 PUSH B ; SAVE (2-DIGIT) YEAR, B = BCD, C = BINARY (UNTIL 2155) 019A 211C02 LXI H,MONTH0+24 019D 79 MOV A,C 019E E603 ANI 03H 01A0 C2A601 JNZ PRDAT3 01A3 213402 LXI H,MONTH1+24 PRDAT3: ; COMPUTE MONTH, DE = DAYS IN YEAR,HL = MON-YR-DAYS TABLE ADJ FOR LEAP 01A6 060C MVI B,12 PRDAT4: 01A8 2B DCX H 01A9 2B DCX H 01AA 05 DCR B 01AB FABD01 JM PRDAT5 ; SHOULD NEVER HAPPEN... 01AE E5 PUSH H 01AF D5 PUSH D 01B0 7E MOV A,M 01B1 23 INX H 01B2 66 MOV H,M 01B3 6F MOV L,A ; DE = DAYS IN YEAR, HL = YTD[MONTH] 01B4 B7 ORA A DSBC D 01B5+ED52 DB 0EDH,D*8+42H 01B7 7D MOV A,L ; POTENTIAL REMAINDER (NEG) 01B8 D1 POP D 01B9 E1 POP H 01BA D2A801 JNC PRDAT4 PRDAT5: ; B = MONTH, 0-11; A = -DOM NEG 01BD+ED44 DB 0EDH,44H 01BF F5 PUSH PSW 01C0 04 INR B 01C1 78 MOV A,B 01C2 CD1C01 CALL DECOUT 01C5 1E2F MVI E,'/' 01C7 0E02 MVI C,CONOUT 01C9 CD0500 CALL BDOS 01CC F1 POP PSW 01CD CD1C01 CALL DECOUT 01D0 1E2F MVI E,'/' 01D2 0E02 MVI C,CONOUT 01D4 CD0500 CALL BDOS 01D7 C1 POP B 01D8 78 MOV A,B ; ALREADY BCD 01D9 CD4F01 CALL HEXOUT 01DC 1E20 MVI E,' ' 01DE 0E02 MVI C,CONOUT 01E0 CD0500 CALL BDOS 01E3 E1 POP H ; -> BCD HOURS 01E4 7E MOV A,M 01E5 23 INX H 01E6 E5 PUSH H 01E7 CD4F01 CALL HEXOUT 01EA 1E3A MVI E,':' 01EC 0E02 MVI C,CONOUT 01EE CD0500 CALL BDOS 01F1 E1 POP H ; -> BCD MINUTES 01F2 7E MOV A,M 01F3 23 INX H 01F4 E5 PUSH H 01F5 CD4F01 CALL HEXOUT 01F8 1E3A MVI E,':' 01FA 0E02 MVI C,CONOUT 01FC CD0500 CALL BDOS 01FF E1 POP H ; -> BCD SECONDS 0200 7E MOV A,M 0201 C34F01 JMP HEXOUT ; J F M A M J J A S O N D 0204 00001F003BMONTH0: DW 0, 31, 59, 90,120,151,181,212,243,273,304,334 021C 00001F003CMONTH1: DW 0, 31, 60, 91,121,152,182,213,244,274,305,335 START: 0234 0E0C MVI C,GETVER 0236 CD0500 CALL BDOS 0239 220401 SHLD VERS 023C 7D MOV A,L 023D FE1E CPI 30 023F DAD902 JC BADVERS 0242 218000 LXI H,CMDLN 0245 4E MOV C,M 0246 23 INX H SID1: 0247 7E MOV A,M 0248 FE20 CPI ' ' 024A C25502 JNZ SID0 024D 23 INX H 024E 0D DCR C 024F C24702 JNZ SID1 0252 C36902 JMP START1 ; NO PARAMS, USE DEFAULTS SID0: ; SCAN HEX NUMBER AS SERVER ID 0255 EB XCHG 0256 210000 LXI H,0 SID2: 0259 1A LDAX D 025A 13 INX D 025B CD3401 CALL HEXNUM 025E DA6502 JC SID3 0261 0D DCR C 0262 C25902 JNZ SID2 SID3: 0265 7D MOV A,L 0266 320901 STA GETTIME+1 START1: ; TODO: HANDLE MP/M... 0269 111801 LXI D,SCBPB 026C 0E31 MVI C,SGSCB 026E CD0500 CALL BDOS 0271 220601 SHLD SCBADR 0274 2A0401 LHLD VERS 0277 3E02 MVI A,2 ; BIT FOR CP/NET 0279 A4 ANA H 027A CA9802 JZ NOCPNET 027D 110801 LXI D,GETTIME 0280 0E42 MVI C,NSEND 0282 CD0500 CALL BDOS 0285 B7 ORA A 0286 C2D002 JNZ ERROR 0289 110E01 LXI D,GOTTIME 028C 0E43 MVI C,NRECV 028E CD0500 CALL BDOS 0291 B7 ORA A 0292 C2D002 JNZ ERROR 0295 C3AF02 JMP SETTIME NOCPNET: 0298 CD3803 CALL NETINIT 029B 010801 LXI B, GETTIME 029E CD4503 CALL SENDMSG 02A1 B7 ORA A 02A2 C2D002 JNZ ERROR 02A5 010E01 LXI B, GOTTIME 02A8 CD6103 CALL RECEIVEMSG 02AB B7 ORA A 02AC C2D002 JNZ ERROR :10010000C334023800000000000002690000010250 :1001100000690400000000003A0000000630D60A22 :10012000DA270104C31E01C60AC630F578CD5B018B :10013000F1C35B01D630D8FE0AD24301292929290F :10014000B56FC9D608D8FE063FD8C60AC33C01F52C :100150000F0F0F0FCD5801F1CD61015F0E02C305E6 :1001600000E60FC69027CE4027C95E235623E50E32 :100170004E06787BB2C2790113216D0179E603C284 :10018000830123E5B7ED52E1D29901EBB7ED52EBD4 :100190000C78C6012747C37901C5211C0279E60303 :1001A000C2A601213402060C2B2B05FABD01E5D5B0 :1001B0007E23666FB7ED527DD1E1D2A801ED44F503 :1001C0000478CD1C011E2F0E02CD0500F1CD1C01BF :1001D0001E2F0E02CD0500C178CD4F011E200E024C :1001E000CD0500E17E23E5CD4F011E3A0E02CD057F :1001F00000E17E23E5CD4F011E3A0E02CD0500E160 :100200007EC34F0100001F003B005A00780097009A :10021000B500D400F300110130014E0100001F00B1 :100220003C005B0079009800B600D500F400120194 :1002300031014F010E0CCD05002204017DFE1EDAB6 :10024000D9022180004E237EFE20C25502230DC21A :100250004702C36902EB2100001A13CD3401DA65AD :10026000020DC259027D3209011118010er space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor pE31CD056E :10027000002206012A04013E02A4CA9802110801C4 :100280000E42CD0500B7C2D002110E010E43CD05BE :1002900000B7C2D002C3AF02CD3803010801CD457B :1002A00003B7C2D002010E01CD6103B7C2D0022A4A :1002B000060111580019EB211301010500F3EDB0FF :1002C000FB11E2020E09CD0500211301CD6A01C91F :1002D00011F4020E09CD0500C91114030E09CD0554 :1002E00000C954696D65207761732073657420744B :1002F0006F3A2024074572726F72207265747269BA :100300006576696E67206E6574776F726B207469AD :100310006D652E2407546869732070726F6772616F :100320006D2072657175697265732042444F532068 :100330003E3D20332E302E243A03014F0CED79ED53 :1003400078320A01C96069E5DDE13A03014F06052B :10035000EDB3DD460404EDB30CED78E602C83EFFD4 :10036000C96069E5DDE13A03014F0CED78E601CAA9 :100370006B030D0605EDB2DD460404EDB20CED781D :06038000E604C83EFFC9BF :0000000000  SETTIME: 02AF 2A0601 LHLD SCBADR 02B2 115800 LXI D,058H ; DATE/TIME 02B5 19 DAD D 02B6 EB XCHG 02B7 211301 LXI H,GOTTIME+5 02BA 010500 LXI B,5 ; LENGTH OF DATE/TIME 02BD F3 DI LDIR 02BE+EDB0 DB 0EDH,0B0H 02C0 FB EI 02C1 11E202 LXI D,DONE 02C4 0E09 MVI C,PRINT 02C6 CD0500 CALL BDOS 02C9 211301 LXI H,GOTTIME+5 02CC CD6A01 CALL PRDATE 02CF C9 RET ERROR: 02D0 11F402 LXI D,ERRMSG 02D3 0E09 MVI C,PRINT 02D5 CD0500 CALL BDOS 02D8 C9 RET BADVERS: 02D9 111403 LXI D,VERMSG 02DC 0E09 MVI C,PRINT 02DE CD0500 CALL BDOS 02E1 C9 RET 02E2 54696D6520DONE: DB 'Time was set to: $' 02F4 074572726FERRMSG: DB 7,'Error retrieving network time.$' 0314 0754686973VERMSG: DB 7,'This program requires BDOS >= 3.0.$' ; THESE ARE ONLY USED IF CP/NET IS NOT RUNNING. NETINIT: 0338 3A0301 LDA IOPORT 033B 4F MOV C,A 033C 0C INR C OUTP A 033D+ED79 DB 0EDH,A*8+41H INP A 033F+ED78 DB 0EDH,A*8+40H 0341 320A01 STA GETTIME+2 0344 C9 RET ; SEND MESSAGE ON NETWORK SENDMSG: ; BC = MESSAGE ADDR 0345 60 MOV H,B 0346 69 MOV L,C ; HL = MESSAGE ADDRESS 0347 E5 PUSH H POPIX 0348+DDE1 DB 0DDH,0E1H 034A 3A0301 LDA IOPORT 034D 4F MOV C,A 034E 0605 MVI B,5 ; LENGTH OF HEADER OUTIR 0350+EDB3 DB 0EDH,0B3H LDX B,4 ; MSG SIZ FIELD (-1) 0352+DD4604 DB 0DDH,B*8+46H,4 0355 04 INR B ; MIGHT BE 0, BUT THAT MEANS 256 OUTIR 0356+EDB3 DB 0EDH,0B3H 0358 0C INR C ; STATUS PORT INP A ; 0359+ED78 DB 0EDH,A*8+40H 035B E602 ANI 02H ; CMD OVERRUN 035D C8 RZ 035E 3EFF MVI A,0FFH 0360 C9 RET ; RECEIVE MESSAGE FROM NETWORK RECEIVEMSG: ; BC = MESSAGE ADDR 0361 60 MOV H,B 0362 69 MOV L,C ; HL = MESSAGE ADDRESS 0363 E5 PUSH H POPIX 0364+DDE1 DB 0DDH,0E1H 0366 3A0301 LDA IOPORT 0369 4F MOV C,A 036A 0C INR C ; STATUS PORT RCVWAIT: INP A 036B+ED78 DB 0EDH,A*8+40H 036D E601 ANI 01H ; DATA READY 036F CA6B03 JZ RCVWAIT 0372 0D DCR C 0373 0605 MVI B,5 ; HEADER LENGTH INIR 0375+EDB2 DB 0EDH,0B2H LDX B,4 ; MSG SIZ 0377+DD4604 DB 0DDH,B*8+46H,4 037A 04 INR B INIR 037B+EDB2 DB 0EDH,0B2H 037D 0C INR C INP A 037E+ED78 DB 0EDH,A*8+40H 0380 E604 ANI 04H ; RSP OVERRUN 0382 C8 RZ 0383 3EFF MVI A,0FFH 0385 C9 RET 0386 END 02D9 BADVERS 0000 BC 0005 BDOS 0080 CMDLN 0002 CONOUT 0002 DE 011E DECOT0 0127 DECOT1 011C DECOUT 02E2 DONE 02F4 ERRMSG 02D0 ERROR 0108 GETTIME 000C GETVER 010E GOTTIME 0158 HEXDIG 0143 HEXNM1 013C HEXNM2 0134 HEXNUM 014F HEXOUT 0004 HL 0103 IOPORT 0004 IX 0004 IY 0204 MONTH0 021C MONTH1 0338 NETINIT 0298 NOCPNET 0043 NRECV 0042 NSEND 0179 PRDAT0 0183 PRDAT1 0199 PRDAT2 01A6 PRDAT3 01A8 PRDAT4 01BD PRDAT5 016A PRDATE 0009 PRINT 015B PROUT 036B RCVWAIT 0361 RECEIVEMSG 0106 SCBADR 0118 SCBPB 0345 SENDMSG 02AF SETTIME 0031 SGSCB 0255 SID0 0247 SID1 0259 SID2 0265 SID3 0234 START 0269 START1 0161 TOHEX 0314 VERMSG 0104 VERS  ; BC = MESSAGE ADDR 0361 60 MOV H,B 0362 69 MOV L,C ; HL = MESSAGE ADDRESS 0363 E5 PUSH H POPIX 0364+DDE1 DB 0DDH,0E1H 0366 3A0301 LDA IOPORT 0369 4F MOV C,A 036A 0C INR C ; A VERSION OF CPNETSTS THAT MINIMIZES OUTPUT 0100 ORG 00100H 0100 C3EC01 JMP START 0103 0D0A43502FL0103H: DB 13,10,'CP/NET Status' 0112 0D0A3D3D3D DB 13,10,'=============' 0121 0D0A24 DB 13,10,'$' 0124 5265717565L012CH: DB 'Requester ID = $' 0134 0D0A4E6574L013CH: DB 13,10,'Network Status Byte = $' 014D 0D0A446576L0155H: DB 13,10,'Device status:' 015D 0D0A24 DB 13,10,'$' 0160 2020447269L016DH: DB ' Drive $' 0169 203D204472L0176H: DB ' = Drive $' 0173 206F6E204EL0180H: DB ' on Network Server ID = $' 018C 2020436F6EL01A2H: DB ' Console Device = $' 01A0 436F6E736FL01B4H: DB 'Console #$' 01AA 20204C6973L01DDH: DB ' List Device = $' 01BB 4C69737420L01ECH: DB 'List #$' 01C2 2020416C6CL01HHH: DB ' All LOCAL$' 01CE 0D0A43502FL0212H: DB 13,10,'CP/NET has not been loaded.$' START: 01EC 210000 LXI H,0 01EF 39 DAD SP 01F0 229503 SHLD USRSTK 01F3 319503 LXI SP,STACK 01F6 CD3003 CALL GETVER 01F9 7C MOV A,H 01FA E602 ANI 02H 01FC CA1603 JZ NOCPNT 01FF 010301 LXI B,L0103H ; INTRO 0202 CD2803 CALL MSGOUT 0205 CD3C03 CALL GETCFG 0208 229903 SHLD NETTBL 020B 012401 LXI B,L012CH ; REQ ID (CLIENT ID) 020E CD2803 CALL MSGOUT 0211 2A9903 LHLD NETTBL 0214 23 INX H 0215 4E MOV C,M 0216 CD4D03 CALL HEXOUT 0219 013401 LXI B,L013CH ; NET STS BYTE 021C CD2803 CALL MSGOUT 021F CD3603 CALL GETSTS 0222 4F MOV C,A 0223 CD4D03 CALL HEXOUT 0226 014D01 LXI B,L0155H ; DISK DEVICE STATUS: 0229 CD2803 CALL MSGOUT 022C AF XRA A 022D 329703 STA COUNT 0230 329803 STA CURDRV DRVLUP: 0233 3A9803 LDA CURDRV 0236 FE10 CPI 16 0238 D29602 JNC TRYCON ; DONE WITH DRIVES A-P... 023B 6F MOV L,A 023C 2600 MVI H,0 023E 29 DAD H ; *2 - 2 BYTES PER DRIVE 023F 23 INX H 0240 23 INX H ; +2 - 2 BYTES BEFORE DRIVES 0241 EB XCHG 0242 2A9903 LHLD NETTBL 0245 19 DAD D 0246 7E MOV A,M 0247 E680 ANI 080H 0249 CA8F02 JZ LOCDRV ; DRIVE IS LOCAL... 024C E5 PUSH H 024D 3A9703 LDA COUNT 0250 B7 ORA A 0251 C44203 CNZ CRLF 0254 219703 LXI H,COUNT 0257 34 INR M 0258 016001 LXI B,L016DH ; DRIVE... 025B CD2803 CALL MSGOUT 025E 3A9803 LDA CURDRV 0261 C641 ADI 'A' 0263 4F MOV C,A 0264 CD2103 CALL CHROUT 0267 0E3A MVI C,':' 0269 CD2103 CALL CHROUT 026C 016901 LXI B,L0176H ; = DRIVE... I.E. REMOTE 026F CD2803 CALL MSGOUT 0272 E1 POP H 0273 E5 PUSH H 0274 7E MOV A,M 0275 E60F ANI 00FH ; REMOTE DRIVE NUMBER 0277 C641 ADI 'A' 0279 4F MOV C,A 027A CD2103 CALL CHROUT 027D 0E3A MVI C,':' 027F CD2103 CALL CHROUT 0282 017301 LXI B,L0180H ; ON SERVER... 0285 CD2803 CALL MSGOUT 0288 E1 POP H 0289 23 INX H 028A 7E MOV A,M ; SERVER ID 028B 4F MOV C,A 028C CD4D03 CALL HEXOUT LOCDRV: ; DRIVE IS LOCAL... 028F 219803 LXI H,CURDRV 0292 34 INR M 0293 C33302 JMP DRVLUP TRYCON: 0296 012200 LXI B,00022H 0299 2A9903 LHLD NETTBL 029C 09 DAD B 029D 7E MOV A,M 029E E680 ANI 080H 02A0 CACE02 JZ TRYLST 02A3 E5 PUSH H 02A4 3A9703 LDA COUNT 02A7 B7 ORA A 02A8 C44203 CNZ CRLF 02AB 219703 LXI H,COUNT 02AE 34 INR M 02AF 018C01 LXI B,L01A2H ; CONSOLE DEVICE = ... 02B2 CD2803 CALL MSGOUT 02B5 01A001 LXI B,L01B4H ; CONSOLE # 02B8 CD2803 CALL MSGOUT 02BB E1 POP H 02BC E5 PUSH H 02BD 7E MOV A,M 02BE CD6103 :10010000C3EC010D0A43502F4E45542053746174C3 :1001100075730D0A3D3D3D3D3D3D3D3D3D3D3D3D04 :100120003D0D0A24526571756573746572204944EA :10013000203D20240D0A4E6574776F726B20537436 :10014000617475732042797465203D20240D0A4442 :100150006576696365207374617475733A0D0A245A :10016000202044726976652024203D2044726976FF :10017000652024206F6E204E6574776F726B20535C :100180006572766572204944203D20242020436F0B :100190006E736F6C6520446576696365203D20242D :1001A000436F6E736F6C6520232420204C69737439 :1001B00020446576696365203D20244C6973742072 :1001C00023242020416C6C204C4F43414C240D0AC9 :1001D00043502F4E455420686173206E6F74206227 :1001E00065656E206C6F616465642E2421000039A2 :1001F000229503319503CD30037CE602CA16030134 :100200000301CD2803CD3C03229903012401CD280D :10021000032A9903234ECD4D03013401CD2803CD8C :1002200036034FCD4D03014D01CD2803AF32970367 :100230003298033A9803FE10D296026F26002923C3 :1002400023EB2A9903197EE680CA8F02E53A9703C9 :10025000B7C4420321970334016001CD28033A98C3 :1002600003C6414FCD21030E3ACD2103016901CDD3 :100270002803E1E57EE60FC6414FCD21030E3ACDBE :100280002103017301CD2803E1237E4FCD4D0321CE :10029000980334C333020122002A9903097EE680C1 :1002A000CACE02E53A9703B7C4420321970334014B :1002B0008C01CD280301A001CD2803E1E57ECD61AD :1002C00003017301CD2803E1237E4FCD4D030124AB :1002D000002A9903097EE680CA0603E53A9703B728 :1002E000C442032197033401AA01CD280301BB01B5 :1002F000CD2803E1E57ECD6103017301CD2803E143 :10030000237E4FCD4D033A9703B7C21C0301C201B0 :10031000CD2803C31C0301CE01CD28032A9503F980 :10032000C9590E02CD0500C950590E09CD0500C9A5 :100330000E0CCD0500C90E44CD0500C90E45CD05F6 :1003400000C90E0DCD21030E0ACD2103C9C5790FB9 :100350000F0F0FCD6103C179CD61030E48CD21038D :0D036000C9E60FC69027CE40274FC32103EA :0603950000000000000062 :0000000000 osition if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive spe CALL HEXDIG 02C1 017301 LXI B,L0180H ; ON NETWORK SERVER ID = 02C4 CD2803 CALL MSGOUT 02C7 E1 POP H 02C8 23 INX H 02C9 7E MOV A,M 02CA 4F MOV C,A 02CB CD4D03 CALL HEXOUT TRYLST: 02CE 012400 LXI B,00024H 02D1 2A9903 LHLD NETTBL 02D4 09 DAD B 02D5 7E MOV A,M 02D6 E680 ANI 080H 02D8 CA0603 JZ DONE 02DB E5 PUSH H 02DC 3A9703 LDA COUNT 02DF B7 ORA A 02E0 C44203 CNZ CRLF 02E3 219703 LXI H,COUNT 02E6 34 INR M 02E7 01AA01 LXI B,L01DDH ; LIST DEVICE = 02EA CD2803 CALL MSGOUT 02ED 01BB01 LXI B,L01ECH ; LIST # 02F0 CD2803 CALL MSGOUT 02F3 E1 POP H 02F4 E5 PUSH H 02F5 7E MOV A,M 02F6 CD6103 CALL HEXDIG 02F9 017301 LXI B,L0180H ; ON NETWORK SERVER ID = 02FC CD2803 CALL MSGOUT 02FF E1 POP H 0300 23 INX H 0301 7E MOV A,M 0302 4F MOV C,A 0303 CD4D03 CALL HEXOUT DONE: 0306 3A9703 LDA COUNT 0309 B7 ORA A 030A C21C03 JNZ EXIT 030D 01C201 LXI B,L01HHH 0310 CD2803 CALL MSGOUT 0313 C31C03 JMP EXIT NOCPNT: 0316 01CE01 LXI B,L0212H ; CP/NET HAS NOT BEEN LOADED 0319 CD2803 CALL MSGOUT EXIT: 031C 2A9503 LHLD USRSTK 031F F9 SPHL 0320 C9 RET CHROUT: 0321 59 MOV E,C 0322 0E02 MVI C,002H 0324 CD0500 CALL 00005H 0327 C9 RET MSGOUT: 0328 50 MOV D,B 0329 59 MOV E,C 032A 0E09 MVI C,009H 032C CD0500 CALL 00005H 032F C9 RET GETVER: 0330 0E0C MVI C,12 0332 CD0500 CALL 00005H 0335 C9 RET GETSTS: 0336 0E44 MVI C,044H 0338 CD0500 CALL 00005H 033B C9 RET GETCFG: 033C 0E45 MVI C,045H 033E CD0500 CALL 00005H 0341 C9 RET CRLF: 0342 0E0D MVI C,13 0344 CD2103 CALL CHROUT 0347 0E0A MVI C,10 0349 CD2103 CALL CHROUT 034C C9 RET HEXOUT: 034D C5 PUSH B 034E 79 MOV A,C 034F 0F RRC 0350 0F RRC 0351 0F RRC 0352 0F RRC 0353 CD6103 CALL HEXDIG 0356 C1 POP B 0357 79 MOV A,C 0358 CD6103 CALL HEXDIG 035B 0E48 MVI C,'H' 035D CD2103 CALL CHROUT 0360 C9 RET HEXDIG: 0361 E60F ANI 0FH 0363 C690 ADI 90H 0365 27 DAA 0366 CE40 ACI 40H 0368 27 DAA 0369 4F MOV C,A 036A C32103 JMP CHROUT 036D DS 40 0395 STACK: DS 0 0395 0000 USRSTK: DW 0 0397 00 COUNT: DB 0 0398 00 CURDRV: DB 0 0399 0000 NETTBL: DW 0 039B END 0321 CHROUT 0397 COUNT 0342 CRLF 0398 CURDRV 0306 DONE 0233 DRVLUP 031C EXIT 033C GETCFG 0336 GETSTS 0330 GETVER 0361 HEXDIG 034D HEXOUT 0103 L0103H 0124 L012CH 0134 L013CH 014D L0155H 0160 L016DH 0169 L0176H 0173 L0180H 018C L01A2H 01A0 L01B4H 01AA L01DDH 01BB L01ECH 01C2 L01HHH 01CE L0212H 028F LOCDRV 0328 MSGOUT 0399 NETTBL 0316 NOCPNT 0395 STACK 01EC START 0296 TRYCON 02CE TRYLST 0395 USRSTK  0100 ORG 0100H 0100 3E17 MVI A,23 0102 32A301 STA LCOUNT 0105 115C00 LXI D,005CH 0108 0E0F MVI C,0FH 010A CD0500 CALL 0005H 010D 3C INR A 010E CA6C01 JZ ERROR 0111 118000 LXI D,0080H 0114 0E1A MVI C,01AH 0116 CD0500 CALL 0005H RDLOOP: 0119 115C00 LXI D,005CH 011C 0E14 MVI C,014H 011E CD0500 CALL 0005H 0121 B7 ORA A 0122 C26301 JNZ DONE 0125 218000 LXI H,0080H 0128 1680 MVI D,080H OUTLOOP: 012A 7E MOV A,M 012B 23 INX H 012C FE1A CPI 01AH 012E CA6301 JZ DONE 0131 E5 PUSH H 0132 D5 PUSH D 0133 FE0A CPI 00AH 0135 C25301 JNZ NOTLF 0138 1E0D MVI E,00DH 013A 0E02 MVI C,002H 013C CD0500 CALL 0005H 013F 1E0A MVI E,00AH 0141 0E02 MVI C,02H 0143 CD0500 CALL 0005H 0146 3AA301 LDA LCOUNT 0149 3D DCR A 014A 32A301 STA LCOUNT 014D CC7501 CZ MORE 0150 C35901 JMP WASLF NOTLF: 0153 5F MOV E,A 0154 0E02 MVI C,002H 0156 CD0500 CALL 0005H WASLF: 0159 D1 POP D 015A E1 POP H 015B 15 DCR D 015C C22A01 JNZ OUTLOOP 015F C31901 JMP RDLOOP DONE0: 0162 E1 POP H ; DISCARD RETURN ADDR DONE: 0163 115C00 LXI D,005CH 0166 0E10 MVI C,010H 0168 CD0500 CALL 0005H 016B C9 RET ERROR: 016C 11A401 LXI D,ERRMSG 016F 0E09 MVI C,09H 0171 CD0500 CALL 0005H 0174 C9 RET MORE: 0175 3E17 MVI A,23 0177 32A301 STA LCOUNT 017A 11AE01 LXI D,MOREMSG 017D 0E09 MVI C,09H 017F CD0500 CALL 0005H 0182 0E01 MVI C,01H 0184 CD0500 CALL 0005H 0187 FE03 CPI 0003H; CTRL C 0189 C29A01 JNZ CLEARMSG 018C E1 POP H ; RET ADDR 018D E1 POP H ; SAVED DE 018E E1 POP H ; SAVED HL 018F 11AB01 LXI D,CRLF 0192 0E09 MVI C,09H 0194 CD0500 CALL 0005H 0197 C36301 JMP DONE CLEARMSG: 019A 11B401 LXI D,CLRMSG 019D 0E09 MVI C,09H 019F CD0500 CALL 0005H 01A2 C9 RET 01A3 17 LCOUNT: DB 23 01A4 4E6F204669ERRMSG: DB 'No File' 01AB 0D0A24 CRLF: DB 13, 10, '$' 01AE 4D4F52453AMOREMSG: DB 'MORE:$' 01B4 0D20202020CLRMSG: DB 13, ' ',13,'$' 01BC END 019A CLEARMSG 01B4 CLRMSG 01AB CRLF 0163 DONE 0162 DONE0 01A4 ERRMSG 016C ERROR 01A3 LCOUNT 0175 MORE 01AE MOREMSG 0153 NOTLF 012A OUTLOOP 0119 RDLOOP 0159 WASLF I A,23 0177 32A301 STA LCOUNT 017A 11AE01 LXI D,MOREMSG 017D 0E09 MVI C,09H 017F CD0500 CALL 0005H 0182 0E01 MVI C,01H 0184 CD0500 CALL 0005H 0187 FE03 CPI 0003H; CTRL C 0189 C29A01 JNZ CLEARMSG 018Ccification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The f:100100003E1732A301115C000E0FCD05003CCA6CF6 :10011000011180000E1ACD0500115C000E14CD05F2 :1001200000B7C2630121800016807E23FE1ACA63D5 :1001300001E5D5FE0AC253011E0D0E02CD05001EBB :100140000A0E02CD05003AA3013D32A301CC750190 :10015000C359015F0E02CD0500D1E115C22A01C3CA :100160001901E1115C000E10CD0500C911A4010EAA :1001700009CD0500C93E1732A30111AE010E09CD0C :1001800005000E01CD0500FE03C29A01E1E1E11177 :10019000AB010E09CD0500C3630111B4010E09CDF9 :1001A0000500C9174E6F2046696C650D0A244D4F36 :0C01B00052453A240D20202020200D2470 :0000000000  0192 0E09 MVI C,09H 0194 CD0500 CALL 0005H 0197 C36301 JMP DONE CLEARMSG: 019A 11B401 LXI D,CLRMSG 019D 0E09 MVI C,09H 019F CD0500 CALL 0005H 01A2 C9 RET 01A3 17 LCOUNT: DB 23 01A4 4E6F204669ERRMSG: DB 'No File' 01AB 0D0A24 CRLF: DB 13, 10, '$' 01AE 4D4F52453AMOR < q] A63D5 :1001300001E5D5FE0AC253011E0D0E02CD05001EBB :100140000A0E02CD05003AA3013D32A301CC750190 :10015000C359015F0E02CD0500D1E115C22A01C3CA :100160001901E1115C000E10CD0500C911A4010EAA :1001700009CD0500C93E1732A30111AE010E09CD0C :1001800005000E01CD0500FE03C29A01E1E1E11177 :10019000AB010E09CD0500C3630111B4010E09CDF9 :1001A0000500C9174E6F2046696C650D0A244D4F36 :0C01B00052453A24y 1 Io& 6 "u!'"wu |1~=1#"u!"wu |1~[1#~UC12p#~]1#~1!͛:( (! :( 1!'͛1͹ :( 1!"r2t  y_ !#*r 6$#"r:t<2t  CA  !:tK     !( ͹ =ƒ 223!'K !T6$#6$#6$ y2#K K T2oͦF :p> ::p8:o8> ͽ > ͽz2o:pY>ͽ:RM:RO>2q :pʅ:q2k!Q~wK ' !'[ K s:U:U=2U*V~#"V:R:R=2R*Sw#"S K `!"S>2R  Z>2!"V>2UK     o& 6$    cc K ||:tʒ       ~?#7Invalid: $Error reading input$Error writing output$No file found for input$Error creating temp$Error renaming temp$ Usage: TR A:{outfile}=B:infile[U|C]$Copying -$ $ 8 :10046F00D1C37C04110705C37C0411DB04D53A7496 :10047F0001B7CA92041E0D0E02CD05001E0A0E0210 :10048F00CD0500D10E09CD0500C30000060D7EFE7F :10049F003FC82305C29D0437C9496E76616C6964F4 :1004AF003A20244572726F722072656164696E67BB :1004BF0020696E707574244572726F72207772693D :1004CF0074696E67206F7574707574244E6F206633 :1004DF00696C6520666F756E6420666F7220696E39 :1004EF0070757424457248 i  i : 0 ' 0x[[0 C))))o? <Xa_ Ɛ'@'^#V#Nx{y!myƒ#RҙR x'Gy!y¦!4 ++~#foR}ҨDx/ / xO  ~#O: ~#O: ~O  ; Z x 0N  < [ y 1O  "}! N#~ U# Gi! 4e Y}2 1 "*>ʘB C ï8Ea*X !   !j    Time was set to: $Error retrieving network time.$This program requires BDOS >= 3.0.$:O yx2 `i:OF x>`i:O xk F x> 021000B500D400F300110130014E0100001F00B1 :100220003C005B0079009800B600D500F400120194 :1002300031014F010E0CCD05002204017DFE1EDAB6 :10024000D9022180004E237EFE20C25502230DC21A :100250004702C36902EB2100001A13CD3401DA65AD :10026000020DC259027D3209011118010ollowing BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creat CP/NET Status ============= $Requester ID = $ Network Status Byte = $ Device status: $ Drive $ = Drive $ on Network Server ID = $ Console Device = $Console #$ List Device = $List #$ All LOCAL$ CP/NET has not been loaded.$! 9"10|(<"$(*#NM4(6OMM(22:Җo& )##*~ʏ:B!4`(:AO!:!i(~AO!:!s(#~OM!43" * ~:B!4((~as(#~OM$ * ~:B!4((~as(#~OM:((*Y PY    D E  ! !yayaH!Ɛ'@'O! 021000032A9903234ECD4D03013401CD2803CD8C :1002200036034FCD4D03014D01CD2803AF32970367 :100230003298033A9803FE10D296026F26002923C3 :1002400023EB2A9903197EE680CA8F02E53A9703C9 :10025000B7C4420321970334016001CD28033A98C3 :1002600003C6414FCD21030E3ACD21030>2\  2   š  c  No File $MORE:$ $ 021000032A9903234ECD4D03013401CD2803CD8C :1002200036034FCD4D03014D01CD2803AF32970367 :100230003298033A9803FE10D296026F26002923C3 :1002400023EB2A9903197EE680CA8F02E53A9703C9 :10025000B7C4420321970334016001CD28033A98C3 :1002600003C6414FCD21030E3ACD21030; SNIOS Prefix (jump table) for CP/NET 1.2 on CP/M 2.2 maclib z80 extrn NTWKIN, NTWKST, CNFTBL, SNDMSG, RCVMSG, NTWKER, NTWKBT cseg ; Jump vector for SNIOS entry points jmp NTWKIN ; network initialization jmp NTWKST ; network status jmp CNFTBL ; return config table addr jmp SNDMSG ; send message on network jmp RCVMSG ; receive message from network jmp NTWKER ; network error jmp NTWKBT ; network warm boot end  ; SNIOS Prefix (jump table) for CP/NET 1.2 on CP/M 2.2 maclib z80 extrn NTWKIN, NTWKST, CNFTBL, SNDMSG, RCVMSG, NTWKER, NTWKBT cseg ; Jump vector for SNIOS entry points 0000 C30000 jmp NTWKIN ; network initialization 0003 C30000 jmp NTWKST ; network status 0006 C30000 jmp CNFTBL ; return config table addr 0009 C30000 jmp SNDMSG ; send message on network 000C C30000 jmp RCVMSG ; receive message from network 000F C30000 jmp NTWKER ; network error 0012 C30000 jmp NTWKBT ; network warm boot 0015 end O ?D @CHK ?D DB 0DDH,0CBH,?D,26H ENDM SLAY MACRO ?D @CHK ?D DB 0FDH,0CBH,?D,26H ENDM SRAR MACRO ?R DB 0CBH,28H+?R ENDM SRAX MACRO ?D @CHK ?D DB 0DDH,0CBH,?D,2EH ENDM SRAY MACRO ?D @CHK ?D DB 0FDH,0CBH,?D,2EH ENDM SRLR 0000 BC 0000 CNFTBL 0002 DE 0004 HL 0004 IX 0004 IY 0000 NTWKBT 0000 NTWKER 0000 NTWKIN 0000 NTWKST 0000 RCVMSG 0000 SNDMSG es a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Netwo֎ % QP h  a 0  0  # 9Q]-%:2#  9Q 22ӑT!I Y5M2 T"`9Q]- Rp NTWKBT cseg ; Jump vector for SNIOS entry points jmp NTWKIN ; network initialization jmp NTWKST ; network status jmp CNFTBL ; return config table addr jmp SNDMSG ; send message on network jmp RCVMSG ; receive message from network jmp NTWKER ; network error jmp NTWKBT ; network warm boot end  ? 45  8! >w : O y xw2@ : G2 x! `i: w: OF x>`i: O x F x>: Oyx$H  A    INDEX ERROR$MULTIPLE DEFINITION: $MAIN MODULE ERROR$FIRST COMMON NOT LARGEST$COMMON ERROR$UNRECOGNIZED ITEM $ 00C3 NTWKIN 00DF NTWKST 00EA CNFTBL 00EE SNDMSG 0110 RCVMSG 0134 NTWKER 0135 NTWKBT 0015 CFGTBL NTWKBT cseg ; Jump vector for SNIOS entry points jmp NTWKIN ; network initialization jmp NTWKST ; network status jmp CNFTBL ; return config table addr jmp SNDMSG ; send message on network jmp RCVMSG ; receive message from network jmp NTWKER ; network error jmp NTWKBT ; network warm boot end vers equ '0e' ; March 12, 2017 16:15 drm "WIN3KP.ASM" ;********************************************************* ; Winchester Disk I/O module for CP/M 3.1 on KAYPRO ; Copyright (c) 2017 Douglas Miller ;********************************************************* MACLIB Z80 extrn @dph,@rdrv,@side,@trk,@sect,@dma,@dbnk,@dstat extrn @dtacb,@dircb,@scrbf,@rcnfg,@cmode extrn ?bnksl,?timot,?getdp extrn ?halloc extrn @lptbl false equ 0 true equ not false ; Ports and Constants sysctl equ 014h ;winchester disk control bits dev0 equ 50 ; first drive in system ndev equ 2 ; # of drives is system ; ********************************************************* ; * * ; * D a t a D e f i n i t i o n s * ; * * ; ********************************************************* ; windta equ 80h ;1002 data port winpcmp equ 81h ;1002 precomp port winerr equ 81h ;1002 error port winsc equ 82h ;1002 sector count port winsec equ 83h ;1002 sector number port winlsb equ 84h ;1002 lsb of cylinder port winmsb equ 85h ;1002 msb of cylinder port winsdh equ 86h ;1002 size/drive/head port winstat equ 87h ;1002 status port wincmd equ 87h ;1002 command port ; rstcmd equ 10h ;1002 restore command seekcmd equ 70h ;1002 seek command rdcmd equ 20h ;1002 read command wrcmd equ 30h ;1002 write command ; wincfg equ 10100000b ;ecc and sector size bits nosel equ 10111000b ;winchester de-select ; TODO: abstract all this to allow other drive types ; ST412 drive parameters (as used by Kaypro): ncyl equ 306 ; total number of cylinders lcyl equ ncyl-1 ; last cylinder number pcmpcyl equ ncyl/2 ;starting precomp cylinder number nhed equ 4 nsec equ 17 zsec equ 512 fsec equ zsec/128 ;--------- Start of Code-producing Source -------------- cseg ;put onlyrk Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE whats necessary in common memory... dw thread db dev0,ndev jmp init$win jmp login$win jmp read$win jmp write$win dw string dw dphtbl,modtbl string: DB 'KAYPRO ',0,'Winchester Disk Interface ',0,'3.10' dw vers db '$' winlun equ 00001000b ; Kaypro convention winpt0 equ 00000000b winpt1 equ 00000010b winpt2 equ 00000100b winpt3 equ 00000110b ; Both partitions use cyls 0-305, but different heads. ; head = (PTN << 1) + (track & 1) ; track >>= 1 modtbl: ; -PTN cfg-byte-template ---not-used-------- DB 10000000b,wincfg+winlun+winpt0,00000000B,00000000B db 11111111b,11111111b,11111111b,11111111b DB 10000001b,wincfg+winlun+winpt1,00000000B,00000000B db 11111111b,11111111b,11111111b,11111111b ; currently, both (all) partitions are identical, ; due to head-slice algorithm for partitioning. ; But, Universal ROM pulls DSM from partition info on disk, ; So each could be different... Also, ROM version selects OFF... dpb0: dw nsec*fsec ; SPT db 5,01fh,1 ; BSH,BSM,EXM dw 1125,1023 ; DSM,DRM db 0ffh,000h ; ALV0 dw 08000h,4 ; CKS,OFF db 2,003h ; PSH, PSM dpb1: dw nsec*fsec ; SPT db 5,01fh,1 ; BSH,BSM,EXM dw 1125,1023 ; DSM,DRM db 0ffh,000h ; ALV0 dw 08000h,4 ; CKS,OFF db 2,003h ; PSH, PSM ; Controller is already done by now win$rw: lda cmdbuf ani 010h mvi a,0b2h ; inir jrz nread mvi a,0b3h ; outir nread: sta here+1 lda @dbnk call ?bnksl lhld @dma lxi b,windta mvi e,2 here: inir dcr e jrnz here xra a call ?bnksl ret offline db 0 ; fatal error prevents use cmdbuf db 0 romid db 0 thread equ $ dseg ; HASH/HBANK is set by main bios... dphtbl: dw 0,0,0,0,0,0,dpb0,0,alv0,@dircb,@dtacb,0ffffh d0h: db 0 ; HBANK dw 0,0,0,0,0,0,dpb1,0,alv1,@dircb,@dtacb,0ffffh d1h: db 0 ; HBANK alv0: ds 512 ; really only need about 283 alv1: ds 512 ; ptnoff equ 302 ; offset in sector of ptn tbl partns: d0dsm: dw 0 d0cyl: dw 0 d1dsm: dw 0 d1cyl: dw 0 partnz equ $-partns ptnend equ zsec-ptnoff-partnz curptn: dw 0 ; cyl offset of current partition ; driver init. DRM+1 is fixed at 1024 init$win: lxi h,@lptbl mvi c,16 initw3: mov a,m sui dev0 cpi ndev jc initw2 inx h dcr c jnz initw3 ret ; no HDD drives in system, do nothing. ; alternatively, could check for existence of hardware. ; for example, AND inputs from ports 80-87 and if 0FFH ; then ahrdware does not exist. initw2: ; if we allow dynamic addition of drives (changes to lptbl), ; then this needs to be triggered in login$win by an init flag. lxi b,1024*4 lxi d,d0h-2 call ?halloc lxi d,d1h-2 call ?halloc xra a sta offline lda 0050h ; gift from loader: ROM id sta romid ; TODO: move to login code, for each LUN... call winrest ; TODO: Universal ROM uses track xlat (spares) table... ; For virtual hardware it should not matter. ; But, partition info is also stored there. Need that now. lda romid cpi 'U' rnz ; done if not Universal ROM lxi h,2 ; new OFF shld dpb0+13 shld dpb1+13 lda modtbl+1 ; spares must be on "drive 0" out winsdh call winrdy jz disable xra a out winlsb out winmsb ; Cyl 0 inr a out winsc ; 1 sector mvi a,nsec-1 out winsec ; last sector on track mvi a,rdcmd out wincmd call winbusy jz disable ; TODO: checksum verification... ; surgically read partition info from buffer... lxi b,ptnoff initw0: in windta dcx b mov a,b ora c jrnz initw0 mvi b,partnz mvi c,windta lxi h,partns inir mvi b,ptnend ; rest of sector initw1: in windta dcr b jrnz initw1 lhld d0dsm shld dpb0+5 lhld d1dsm shld dpb1+5 ret login$win: lda offline ora a rnz ; This should prevent read/write from ; ever being called ; TODO: check init flag (per LUN, not partition) ; and call winrest (anything else?). ; Could always select LUN and test READY. lda romid cpi 'U' mvi a,0 rnz lhld @cmode mov a,m ani 00000011b ; ptn add a add a ; 4 bytes per drive inr a inr a ; +2 for cyl offset mov e,a mvi d,0 lxi h,partns dad d mov a,m inx h mov h,m mov l,a shld curptn ; cyl offset of current partition xra a ret setup$win: lhld @cmode inx h mov b,m ; SDH template eSSDDHH- lda @trk ani 1 ora b ; eSSDDHHH out winsdh call winrdy rz ; timeout mvi a,pcmpcyl out winpcmp ; This is horrible, but since 302C ROM does it ; we also must to keep compatible on disk: ; if (trk > 7) trk += 4; ; else if (trk >= 4) trk += (trk - 4); ; For universal ROM: ; if (trk > 1 || ptn > 0) trk += 12; ; All: ; putHd((trk & 1) | (ptn << 1)); ; putCyl(trk >> 1); lhld @trk lda romid cpi '3' jrnz setup2 mov a,l ani 11111000b ora h jrz setup1 lxi d,4 dad d jr setup2 setup1: mov a,l cpi 4 jrc setup2 sui 4 add l ; CARRY not possible mov l,a setup2: srlr h rarr l ; from here on, use cyl lda romid cpi 'U' jrnz setup3 ; probably wrong, but should not have WD1002 ; B is still eSSDDHH- from above lded curptn ; cyl offset dad d mov a,l ora h ; cyl 0 is special case jrnz setup4 mov a,b ani 00000110b jz setup3 ; partition 0 no xlat setup4: lxi d,6 dad d setup3: mov a,l out winlsb mov a,h out winmsb lda @sect out winsec mvi a,1 out winsc ora a ret read$win: mvi a,rdcmd sta cmdbuf call setup$win jrz error ; timeout on READY lda cmdbuf out wincmd call winbusy jrz error ; timeout on BUSY in winstat bit 0,a jrnz error ; ERROR set bit 3,a jrz error ; no DRQ ; no more errors from here on... call win$rw ; xfer from common memory... xra a ret write$win: mvi a,wrcmd sta cmdbuf call setup$win jrz error ; timeout on READY lda cmdbuf out wincmd lxi d,0 mvi h,3 write1: in winstat bit 3,a ; DRQ jrnz write2 call timer jrnz write1 ; timeout - no failure here? we'll get error from winbusy? write2: call win$rw ; xfer from common memory... call winbusy jrz error in winstat bit 0,a ; ERROR jrnz error xra a ret error: ; possible retry.TER 029C 3A7F0D LDA CNFIG 029F B7 ORA A ;IS THIS THE SECOND ENTRY OF THIS TYPE? 02A0 C27F03 JNZ BADCMD ;ERROR IF IT IS. 02A3 79 MOV A,C 02A4 C630 ADI '0' 02A6 327F0D STA CNFIG 02A9 C35703 JMP MORE 02AC 13 FIG1: INX D ;GO TO END OF FORMAT STRING TABLE 02AD DJNZ FIG1 02AF E1 FIG3: POP H ;RESTORE PARAMETER ADDRESS 02B0 0C INR C ; 02B1 C37202 JMP CONFIG 02B4 E1 NOTCNF: POP H ;WE KNOW THERE MUST BE AT LEAST ONE CHARACTER 02B5 CD1B02 CALL CHAR ; GET A CHARACTER FOR THE LOOP 02B8 FE44 CPI 'D' ; CHECK FOR 'D' COMMAND 02BA CAF802 JZ DPROC 02BD FE53 CPI 'S' 02BF CA1C03 JZ STEP ;STEPRATE OR "SINGLE XXX" 02C2 FE51 CPI 'Q' 02C4 C27F03 JNZ BADCMD HPROC: 02C7 47 MOV B,A 02C8 CD1B02 CALL CHAR 02CB D27F03 JNC BADCMD 02CE FE54 CPI 'T' 02D0 C27F03 JNZ BADCMD 02D3 78 TRK: MOV A,B 02D4 E60F ANI 0FH 02D6 47 MOV B,A 02D7 7E MOV A,M ; PEEK NEXT ARGUMENT 02D8 FE53 CPI 'S' 02DA JRZ TRK0 02DC FE44 CPI 'D' 02DE JRZ TRK1 02E0 78 MOV A,B 02E1 JR TRK1 ; ALREADY VALIDATED... 02E3 CD1B02 TRK0: CALL CHAR 02E6 C27F03 JNZ BADCMD 02E9 E60F ANI 0FH 02EB 07 RLC 02EC 07 RLC 02ED 07 RLC 02EE 07 RLC 02EF B0 ORA B TRK1: 02F0 32800D STA TRACK 02F3 C35703 JMP MORE 02F6 3E53 SPROC: MVI A,'S' 02F8 47 DPROC: MOV B,A ; SAVE SINGLE OR DOUBLE 02F9 CD1B02 CALL CHAR ; GET THE CHARACTER 02FC D27F03 JNC BADCMD 02FF FE54 CPI 'T' 0301 CAD302 JZ TRK 0304 FE44 CPI 'D' 0306 CA1503 JZ DENS 0309 FE53 CPI 'S' 030B C27F03 JNZ BADCMD 030E 78 MOV A,B ; GET THE SIDE ARGUMENT 030F 32810D STA SIDE 0312 C35703 JMP MORE 0315 78 DENS: MOV A,B ; GET THE DENSITY ARGUMENT 0316 32820D STA DENSITY 0319 C35703 JMP MORE 031C 7E STEP: MOV A,M ; GET NEXT ARGUMENT 031D FE30 CPI '0' ; MUST BE NUMERIC 031F DA7F03 JC BADCMD 0322 FE3A CPI '9'+1 0324 D2F602 JNC SPROC 0327 CD1B02 CALL CHAR 032A D630 SUI '0' ; MAKE IT NUMERIC 032C 47 MOV B,A ; AND SAVE IT 032D 7E MOV A,M ; IT MUST BE A NUMBER, A COMMA, OR NULL 032E B7 ORA A 032F CA5303 JZ SOK 0332 FE2C CPI ',' 0334 CA5303 JZ SOK 0337 FE20 CPI ' ' 0339 CA5303 JZ SOK 033C FE30 CPI '0' 033E DA7F03 JC BADCMD 0341 FE3A CPI '9'+1 0343 D27F03 JNC BADCMD 0346 CD1B02 CALL CHAR 0349 D630 SUI '0' ; NUMERIC, MAKE IT BINARY 034B 4F MOV C,A ; AND SAVE IT 034C 78 MOV A,B ; GET FIRST NUMBER 034D 87 ADD A 034E 87 ADD A 034F 80 ADD B 0350 87 ADD A ; TIMES 10 0351 81 ADD C ; PLUS SECOND NUMBER 0352 47 MOV B,A ; EXPECTED IN B 0353 78 SOK: MOV A,B ; GET STEP RATE 0354 32830D STA STEPRT ; AND SAVE IT 0357 CD1B02 MORE: CALL CHAR ; GET NEXT CHARACTER 035A D27A03 JNC FINISH 035D FE2C CPI ',' ; CONTINUE IF A COMMA 035F CA6B03 JZ NXOPT0 0362 FE20 CPI ' ' ; OR A SPACE 0364 CA5703 JZ MORE 0367 2B DCX H 0368 C36A02 JMP NXOPT 036B CD1B02 NXOPT0: CALL CHAR 036E D27A03 JNC FINISH 0371 FE20 CPI ' ' 0373 CA6B03 JZ NXOPT0 0376 2B DCX H 0377 C36A02 JMP NXOPT 037A AF FINISH: XRA A 037B 327D0D STA NEWARG 037E C9 RET 037F 3E01 BADCMD: MVI A,1 0381 B7 ORA A ; SET THE ZERO FLAG 0382 C9 RET ; UPDATE THE PRESENT MODE VALUE ; UPMODE: 0383 E5 PUSH H 0384 POPIX 0386 3A7F0D LDA CNFIG ; SEE IF CONFIGURATION WAS SPECIFIED 0389 B7 ORA A 038A CA9F03 JZ BIT1 038D D630 SUI '0' ;MAKE IT BINARY 0,1,2... 038F 210100 LXI H,00000000$00000001B 0392 3C INR A 0393 3D GC1: DCR A 0394 JRZ GC0 0396 29 DAD H 0397 JR GC1 GC0: 0399 STX H,+0 039C STX L,+1 BIT1: 039F 3A810D LDA SIDE ; SEE IF SIDE WAS SPECIFIED 03A2 B7 ORA A 03A3 CAB503 JZ BIT3 03A6 RESX 6,+3 ; CLEAR THE SIDE BIT 03AA 2F CMA 03AB E601 ANI 1 ; MASK THE LSB 03AD 0F RRC 03AE 0F RRC ; TO BIT 6 03AF ORAX +3 ; INTO THE MODE BYTE 03B2 STX A,+3 ; AND UPDATE THE BYTE 03B5 3A820D BIT3: LDA DENSITY ; SEE IF DENSITY WAS SPECIFIED 03B8 B7 ORA A 03B9 CACD03 JZ BIT4 03BC RESX 4,+3 ; CLEAR DENSITY BIT 03C0 2F CMA 03C1 E601 ANI 1 03C3 0F RRC 03C4 0F RRC 03C5 0F RRC 03C6 0F RRC ; TO BIT 4 03C7 ORAX +3 ; MASK THE BIT 03CA STX A,+3 ; AND SAVE IT IN MEMORY 03CD 3A800D BIT4: LDA TRACK 03D0 B7 ORA A 03D1 CA1504 JZ BIT5 03D4 RESX 5,+3 ; RESET EVERYTHING, THEN SET AS NEEDED 03D8 RESX 1,+2 03DC RESX 0,+2 03E0 RESX 5,+2 03E4 E60F ANI 0FH 03E6 FE04 CPI 'D' AND 0FH ; 04 03E8 JRZ SDT 03EA FE03 CPI 'S' AND 0FH ; 03 03EC JRZ BIT5 ; CPI 'Q' AND 0FH ; 01 ; JRZ SQT ; QT - QUAD TRACK 03EE SETX 0,+2 ; MEDIA QT ASSUMED 03F2 SETX 1,+2 ; DRIVE QT 03F6 SDT: SETX 5,+3 ; MEDIA DT (OR QT) ASSUMED 03FA SETX 5,+2 ; DRIVE DT ; DT/QT MIGHT HAVE LESSER MEDIA... 03FE 3A800D LDA TRACK 0401 07 RLC 0402 07 RLC 0403 07 RLC 0404 07 RLC 0405 E60F ANI 00FH 0407 JRZ BIT5 ; MEDIA SAME, DONE 0409 RESX 0,+2 ; AT LEAST WE KNOW CAN'T BE QT MEDIA 040D FE04 CPI 'D' AND 0FH ; 04 040F JRZ BIT5 0411 RESX 5,+3 ; MAKE ST MEDIA 0415 3A830D BIT5: LDA STEPRT ; GET THE REQUESTED STEP RATE 0418 B7 ORA A ; SEE IF USER SPECIFIED ONE 0419 CA4904 JZ BIT6 041C BITX 7,+2 ; SIZE, 5.25 OR 8 0420 21630D LXI H,STEPTB 0423 110400 LXI D,4 ; TABLE IS 4 BYTES LONG 0426 CA2A04 JZ FIVE 0429 19 DAD D ; ADD OFFSET 042A 0600 FIVE: MVI B,0 ; INITIAL STEP RATE 042C BE NXRT: CMP M ; COMPARE REQUEST WITH TABLE 042D DA3804 JC GSRT ; MEMORY IS GREATER, THIS IS IT 0430 23 INX H 0431 04 INR B 0432 1D DCR E 0433 C22C04 JNZ NXRT 0436 0603 MVI B,3 ; IN CASE OF OVERFLOW 0438 78 GSRT: MOV A,B ; STEP RATE MASK 0439 RESX 2,+2 043D RESX 3,+2 ; CLEAR BITS 0441 07 RLC 0442 07 RLC 0443 ORAX +2 ; AND UPDATE MODE VALUE 0446 STX A,+2 BIT6: 0449 CD7D04 CALL SERDP 044C B7 ORA A 044D C2E806 JNZ NOCHG ; ERROR IF NON-ZERO (NO DPB FOUND) ; ; MODE BYTES UPDATED BY "?SERDP" ; 0450 216E0D LXI H,MINFO ; NEW MODE BYTE POINTER 0453 E5 PUSH H 0454 3E04 MVI A,4 ; NUMBER OF BYTES TO CHECK 0456 LBCD MODPTR ; OLD MODE BYTE POINTER 045A LDED MSKPTR ; MODE BYTE MASK POINTER 045E F5 ANOTHR: PUSH PSW ; SAVE THE COUNTER 045F 0A LDAX B ; GET OLD MODE BYTE 0460 AE XRA M ; SET BIT FOR VALUES CHANGED 0461 EB XCHG 0462 A6 ANA M ; CHECK FOR CHANGED BYTES 0463 EB XCHG 0464 C2E806 JNZ NOCHG ; ERROR IF NON ZERO 0467 13 INX D 0468 03 INX B 0469 .. ; possible recovery - step, restore, etc. xra a inr a ret ; ; WD 1002 interface routines. ; ; Written by: T. Hayes ; ; These routines provide the physical interface between the system ; and the WD 1002 winchester controller. ; winrest: ; ; Reset and restore the winchester disk ; ; On entry: ; B contains the configuration byte of the drive to be accessed ; ; On exit: ; A and B contain the configuration byte altered as follows: ; Bits 2 and 3 will be set if the drive is off line ; or reset if the controller is ready ; ; in sysctl ;first issue a controller reset setb 1,a out sysctl push psw ; mvi h,1 ;hold reset for > 50 ms lxi d,0 winrest1: call timer jrnz winrest1 pop psw ; res 1,a ;select controller (MR off) out sysctl ; mvi h,3 lxi d,6000h winrest11: in winstat ;Check busy bit 7,a ; jrz winrest3 ;go on if not busy call timer ;else count down jrnz winrest11 ; disable: xra a dcr a sta offline ; disable drive... ret ;and return that status to caller winrest3: in winerr ;check for diagnostic errors cpi 1 ;if error jrz winrest31 ;ignore "diagnostic only" errrors ; ana a ;believe all others jrnz disable ;abort if an error shown winrest31: call winpsel ; call winrdy ;ready wait jrnz winrest32 call winrdy ;wait for device ready (again?) jrz disable ;abort if timed out (twice) ; winrest32: mvi a,rstcmd ;issue the restore command out wincmd ; call winbusy ;wait for not busy jrz disable ;abort if timed out ; in winstat ;get device status ; bit 0,a ;if there was an error jrnz disable ;abort winrest6: xra a sta offline ret ;return that status to caller ; winpsel: ; ; WD 1002 physical select routine ; ; for now, assume "drive 0" has valid LUN ; lda modtbl+1 ; fully-formed SDH byte from "drive 0" ; out winsdh ;and issue the select ret ;return to caller timer: ; ; General down counter routine ; ; On entry: ; HDE are a 24 bit counter ; On exit: ; The counter will have been decremented ; zero is set if the counter is done ; zero is reset if the counter is not at 000000h ; ; Typical timings are 25 t states in the loop with an additional ; overhead of 29 t states in the calling routine. This assumes ; that the calling routine is using a call xxx and jr nz,xxxx. ; This gives a time of 13.5 usec for each iteration of the loop. ; Times when de goes 0 will be marginally longer but should not ; be significant. ; dcx d mov a,d ora e rnz dcr h ret ; TODO: make use of this somehow... winoff: ; ; If the 1002 is not at 305, seek track ; 305 then select physical unit 3. It is assumed that ; the host buffer has been flushed. ; in win command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the systemlsb ;see if the drive is at 305 already cpi high lcyl jrnz winoff1 in winmsb cpi low lcyl jrz winoff2 winoff1: ; mvi a,high lcyl out winmsb mvi a,low lcyl out winlsb ; mvi a,seekcmd ;now issue a seek to that cylinder out wincmd ; ret ;return to caller winoff2: mvi a,nosel ;now deselect the drive out winsdh ; ret ;and return to caller winrdy: ; ; Wait for device ready ; mvi h,5 lxi d,0 winrdy1: in winstat ;check for ready bit 6,a rnz ;return if it is ; call timer ;else count down rz ;return if timed out jr winrdy1 ;else try again ; ; winbusy: ; ; Wait for device not busy ; mvi h,7 ;set up dead man counter lxi d,0 winbusy1: in winstat ;get status cma bit 7,a ;if not busy rnz ;return call timer ;else count down rz ;and return if timed out jr winbusy1 ; end ve number STA DRVNUM ; and save it away CPI 0FFH RZ ; return if no drive installed DROK: LXI B,search-3 ; address of search routine LHLD sysadr DAD B MOV C,A ; SEARCH REQUIRES DRIVE NUMBER IN REG. C call icall ;call module-search with A=physical drive number jc syserr shld module STA RELDSK ; ; CHECK IF DRIVER IS RECENT RELEASE (HAS MODE BYTES) ; DO THIS BY CHECKING FOR MULTIPLE STRINGS ; MVI A,1 ; more than one string in this release PUSH H ; SAVE MODULE ADDRESS CALL GETSTR POP H ; RESTORE MODULE ADDRESS ORA A ; and see if there are 2 strings mvi a,0feh rnz MVI A,30 ; a ridiculous string number CALL GETSTR ; DE points to null (we hope) XCHG ; make it HL DCX H ; POINT TO TERMINATOR MOV A,M CPI '$' ; IS IT A DOLLAR SIGN ? mvi a,0feh rnz ; additional check ; A=relative drive number ; HL=modtbl LHLD MODULE ; START OF MODULE LXI D,16 DAD D ; POINTER TO MODE TABLE CALL HLIHL ; MODE TABLE LDA RELDSK add a add a add a ; *8 mov e,a mvi d,0 dad d GOTADR: SHLD MODPTR ; save the mode byte pointer XCHG LXI H,4 ; +4 to mask DAD D SHLD MSKPTR ; save the mode byte mask pointer LXI H,MINFO ; internal storage buffer XCHG ; from HL to DE for LDIR LXI B,4 ; 4 bytes LDIR ; to store the mode byte internally LXI H,MINFO ; restore pointer LDA DRVNUM RET ; ; This subroutine searches for the driver text string specified ; by the accumulator. Strings are numbered 0-N. ; on entry: ; DE = pointer to driver ; A = desired string ; On exit: ; DE = pointer to desired string or first character ; past the last string (null in later releases) ; A = error code 0 = found, 0FFH = not found ; GETSTR: PUSH PSW ; save requested field LXI d,12 ; point to string vector DAD D ; to start of strings CALL HLIHL SHLD STRADR ; initial text pointer XRA A STA GETERR ; clear error flag STA FLDNUM ; set field number 0 NXTFLD: LDA GETERR ; check error flag ORA A JNZ GETXIT ; error if non zero SHLD STRADR ; start of search string MVI B,100 ; search 100 characters GETCHR: MOV A,M INX H ; point past separator CPI '$' ; field terminator JZ CHKEND ; DOLLAR SIGN OR NULL ORA A JZ CHKEND CPI ' ' JC SETERR DJNZ GETCHR SETERR: MVI A,0FFH STA GETERR ; set error flag JMP GETXIT CHKEND: LDA FLDNUM MOV B,A POP PSW ; get requested field PUSH PSW CMP B ; is this one correct JZ GETXIT ; found if zero INR B ; increment field number MOV A,B STA FLDNUM DCX H MOV A,M ; GET FIELD TERMINATOR INX H SHLD STRADR ; SET NEW STRING ADDRESS ORA A ; IS TERMINATOR A NULL ? JNZ SETERR ; IF NOT IT'S A '$' AND WE'VE HIT END OF STRING JMP NXTFLD ; BEFORE FINDING FIELD GETXIT: LDED STRADR ; string address POP PSW ; clean up stack LDA GETERR ; error flag RET ; THIS SUBROUTINE RESETS THE DRIVE that got THE NEW MODE BYTE ; RESET: LDA NDRIVE ; get drive number INR A ; start with 1-16 LXI D,1 ; 1 for drive A: LRST: DCR A ; decrement drive number JZ REST ; if zero, then DE is setup SLAR E ; shift left with zero fill RALR D ; shift left with carry JMP LRST ; keep shifting REST: MVI C,RESDRV ; BDOS reset drive function CALL BDOS RET ICALL: PCHL ; ; THIS FUNCTION RETURNS A TEXT STRING TO BE OUTPUT ; GETTXT: lhld module ; get module address lxi d,stroff ; address text string offset dad d mov e,m ; move to de inx h mov d,m ret ; ; LOAD HL INDIRECT THROUGH HL ; HLIHL: MOV C,M INX H MOV H,M MOV L,C RET ; ; specified drive does not exist ; NODRV: LXI D,NODRMS ; drive not sysgened message JMP ERXIT ; ; FDC driver is the wrong release level ; WRONG: LXI D,WRGMSG JMP ERXIT ; ; drive is in logical/physical table but has not been ; linked in. system error. ; SYSERR: LXI D,SERMSG ; drive not LINKed message JMP ERXIT ; ; driver is not FDC or Z37 ; FIXED: LXI D,DIFFER ; not FDC or Z37 driver JMP ERXIT ; ; this is the error for changing an invalid item ; NOCHG: LXI D,CHGMSG ; cannot change a parameter message MVI C,TYPE CALL BDOS LXI D,HALFHL JMP ERXIT ; ; Bad command line error ; ENDERR: LXI D,BADMSG ; bad command line message ERXIT: MVI C,TYPE ; error exit CALL BDOS DONE: LSPD OLDSP ; normal exit RET ; restore original stack pointer crlf lxi d,crlfmsg mvi c,type call bdos ret ; data storage ; HELP: DB 'The MODE utility is called in one of the following ways:' DB CR,LF,LF,' MODE',CR,LF DB 'Outputs HELP information',CR,LF,LF DB ' MODE d:',CR,LF DB 'Displays the present drive status to the user',CR,LF,LF HALFHL: DB ' MODE d:arg1,arg2,arg3',CR,LF DB 'Updates the present status and displays it. Valid' DB ' arguments are:',CR,LF,LF DB ' DS or SS = double or single sided',CR,LF DB ' DT, ST or HT = double (96 tpi), single (48 tpi),' DB ' or half track',CR,LF DB ' half track is 48 tpi media in a 96 tpi drive.',CR,LF DB ' DD or SD = double or single density',CR,LF DB ' S6, S30, etc. = step rate in milliseconds',CR,LF DB ' MMS, Z37, Z37X etc. (media formats); the X implies' DB ' extended format.',CR,LF,LF,'$' DIFFER: DB 'Drive ' DIFD: DB 'A: has a fixed configuration which cannot ' DB 'be determined by MODE.',CR,LF,'$' INCH5: DB '5.25 inch floppy',CR,LF,'$' INCH8: DB '8 inch floppy',CR,LF,'$' CTRMSG: DB ' Controller - $' SSMSG: DB ' Sides - 1',CR,LF,'$' DSMSG: DB ' Sides - 2',CR,LF,'$' SDMSG: DB 'Recording Density - Single',CR,LF,'$' DDMSG: DB 'Recording Density - Double',CR,LF,'$' T48MSG: DB ' Tracks per Inch - 48',CR,LF,'$' T96MSG: DB ' Tracks per Inch - 96',CR,LF,'$' HALFTK: DB ' Tracks per Inch - 48 tpi media in 96 tpi drive (R/O)' crlfmsg DB CR,LF,'$' fmtstr: DB ' Format Type - $' STRMSG: DB ' Step Rate - $' STRATE: DB '00 milliseconds',CR,LF,'$' DRSTR: DB ' Drive - ' DSKLT: DB 'A: (' DSKNM: DB ' ) $' TTLE0: DB 'PRESENT Configuration is:',CR,LF,'$' TTLE1: DB 'NEW Configuration is:',CR,LF,'$' BADMSG: DB 'Invalid command line or command line arguments.',CR,LF,'$' CHGMSG: DB 'The requested format is invalid for the specified drive.' DB CR,LF,'The complete configuration must be supplied',CR,LF,'$' NODRMS: DB 'A: does not exist.',CR,LF,'$' WRGMSG: DB 'The driver module for ' WRGD: DB 'A: is incompatible with MODE.',CR,LF,'$' DB ' inoperative.',CR,LF,'$' SERMSG: DB 'Drive is specified but not linked - ERROR IN SYSTEM-' DB CR,LF,'$' STRTBL: DB ' 6122030 3 61015' ; possible step rates, 2 bytes each STEPTB: DB 7,13,21,31,4,7,11,16 MODULE: DW 0 RELDSK: DB 0 MINFO: DB 0,0,0,0 MODPTR: DW 0 MSKPTR: DW 0 CMDPTR: DW 0 DRVNUM: DB 0 STRADR: DW 0 GETERR: DB 0 FLDNUM: DB 0 NEWARG: DB 0 NDRIVE: DB 0 ; 0 to 15 CNFIG: DB 0 ; MMS=0, MMSD=1,Z17=2 (ALL + '0') TRACK: DB 0 ; D or S or H SIDE: DB 0 ; D or S DENSITY: DB 0 ; D or S STEPRT: DB 0 ; binary number OLDSP: DW 0 DS 32 STACK: DS 0 END vers equ '3 ' ; March 12, 2017 16:32 drm "DRIVES.ASM" maclib Z80 ; Program to display logical/physical drive relationships for CP/M 3 ; also to work on MP/M-II on 77500 cpm equ 0 conout equ 2 msgout equ 9 retver equ 12 cr equ 13 lf equ 10 cseg base: jmp start bdos equ base-100h+5 signon: db cr,lf,'DRIVES v3.10' dw vers db cr,lf,'$' str0: db ': = ($' verr: db cr,lf,'Must have CP/M 3$' vererr: lxi d,verr mvi c,msgout call bdos jmp xit thread: dw 0 lptbl: dw 0 lpsetup: db 0,0,0 ;physical drive number, string address for drive A: db 0,0,0 ; drive B: db 0,0,0 ; C: db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 ; P: start: sspd savstk lxi sp,stack lxi d,signon mvi c,msgout call bdos mvi c,retver call bdos mov a,l sui 30h cpi 16 jnc vererr mov a,h lhld cpm+1 cpi 1 ;MP/M? jrnz st0 inx h mov e,m inx h mov d,m xchg st0: mvi l,100 ;lptbl mov e,m inx h mov d,m inx h mov c,m ;thread inx h mov b,m sbcd thread sded lptbl lhld lptbl lxi d,lpsetup mvi b,16 su0: mov a,m stax d inx h inx d inx d inx d djnz su0 lhld thread su2: mov e,m inx h mov d,m inx h mov a,d ora e jz su1 push d mov a,m ;first device cpi 200 jnc su3 ;disk I/O only, no character I/O. mov b,a inx h mov c,m ;number of devices lxi d,12+1 ; dad d ;point to string address mov e,m inx h mov d,m lxi h,lpsetup xchg push h mvi l,16 su6: ldax d ;physical drive number of logical drive. inx d sub b cmp c ;in range? jnc su4 ; xthl xchg mov m,e ;put string address in setup table inx h mov m,d inx h xchg xthl su5: dcr l jnz su6 pop h ;discard jmp su3 su4: inx d inx d jmp su5 su3: pop h jmp su2 su1: lxi h,lpsetup ;now print out list of drives mvi b,16 su9: mov a,m cpi 255 ;drive not available jz nxtone call crlf mvi a,16 sub b ;make 0,1,2,3,4... for A,B,C,... adi 'A' call chrout lxi d,str0 call strout mov a,m ;physical drive number call decout mvi a,')' call chrout mvi a,3+1+1 sub c ; mov c,a dcr c jz su7 su8: mvi a,' ' call chrout dcr c jnz su8 su7: inx h mov e,m inx h mov d,m inx h mov a,e ora d jrz su10 call strout su10: djnz su9 call crlf xit: lspd savstk ret nxtone: inx h inx h inx h jmp su10 ds 32 stack: ds 0 savstk: ds 2 crlf: mvi a,cr call chrout mvi a,lf chrout: push b push d push h mov e,a mvi c,conout call bdos pop h pop d pop b ret strout: push b push h mvi c,msgout call bdos pop h pop b ret decout: push b push h lxi b,0 ;for leading zero deletion, output count mvi e,100 call divout mvi e,10 call divout call dv1 ;always display one's digit. pop h mov a,c pop b mov c,a ;number of characters outputed in C ret divout: mvi d,0 dv0: inr d sub e jnc dv0 add e dcr d mov l,a ;remainder in L, temp. bit 0,b ;leading zero? jnz dv1 mov a,d ora a jz dv2 dv1: setb 0,b inr c adi '0' call chrout dv2: mov a,l ret end ned by MODE.',CR,LF,'$' INCH5: DB '5.25 inch floppy',CR,LF,'$' INCH8: DB '8 inch floppy',CR,LF,'$' CTRMSG: DB ' Controller - $' SSMSG: DB ' Sides - 1',CR,LF,'$' DSMSG: DB ' Sides - 2',CR,LF,'$' SDMSG: DB 'Recording Densi23 INX H ; POINT TO THE NEXT BYTE 046A F1 POP PSW ; GET COUNTER 046B 3D DCR A ; AND DECREMENT IT 046C C25E04 JNZ ANOTHR 046F E1 POP H ; RESTORE POINTER 0470 0604 MVI B,4 0472 LDED MODPTR ; ACTUAL MODE BYTE POINTER 0476 7E UPONE: MOV A,M ; IF ALL'S WELL, LET'S ACTUALLY UPDATE 0477 12 STAX D ; THE MODE BYTE 0478 23 INX H 0479 13 INX D 047A DJNZ UPONE 047C C9 RET ; AND RETURN 047D 116E0D SERDP LXI D,MINFO ; MODE BYTE POINTER TO DE 0480 2A0301 LHLD SYSADR ; CALL SERDP 0483 016500 LXI B,?SERDP-3 0486 09 DAD B ; POINTER TO SERDP CALL ADDRESS 0487 CDCB06 CALL HLIHL ; GET CALL ADDRESS 048A E5 PUSH H 048B CDBF06 CALL ICALL ; CALL "GETDP" TO FIND A DPB FOR THIS MODE 048E D1 POP D ; ADD START OF SERDP TO HL TO GET START OF 048F 19 DAD D ; FORMAT STRING TABLE 0490 C9 RET ; OUTPUT THE MODE DATA TO THE CRT ; A POINTER TO THE MODE DATA IS PASSED IN THE HL ; MPRINT: 0491 3A780D LDA DRVNUM ; GET PHYSICAL DRIVE NUMBER 0494 010000 LXI B,0 ; TENS COUNTER IN C AND ONES IN B 0497 0C MORTEN: INR C 0498 D60A SUI 10 049A CAA404 JZ GOTNUM 049D F29704 JP MORTEN 04A0 0D DCR C 04A1 C60A ADI 10 04A3 47 MOV B,A 04A4 213030 GOTNUM: LXI H,3030H ; NUMERIC OFFSET TO ASCII 04A7 09 DAD B 04A8 7D MOV A,L ; TENS DIGIT 04A9 FE30 CPI '0' ; CHECK FOR ZERO 04AB C2B004 JNZ NOZE 04AE 3E20 MVI A,' ' ; IF SO, REPLACE WITH A SPACE 04B0 6F NOZE: MOV L,A 04B1 22EE0B SHLD DSKNM 04B4 110F0C LXI D,TTLE1 04B7 3A7D0D LDA NEWARG ; WAS CONFIGURATION CHANGED 04BA B7 ORA A ; ZERO IF NOT CHANGED 04BB CAC104 JZ TYPNC 04BE 11F30B LXI D,TTLE0 04C1 0E09 TYPNC: MVI C,TYPE 04C3 CD0500 CALL BDOS 04C6 11D60B LXI D,DRSTR ; DRIVE LETTER AND NUMBER MESSAGE 04C9 0E09 MVI C,TYPE 04CB CD0500 CALL BDOS 04CE 2A720D LHLD MODPTR ; POINTER TO SYSTEM MODE BYTE 04D1 E5 PUSH H ; SAVE THE MODE POINTER 04D2 BIT 7,M ; CHECK VALIDITY 04D4 C2FE06 JNZ DONE ; NON-ZERO IF HARD DISK 04D7 23 INX H 04D8 23 INX H 04D9 BIT 7,M ; SIZE, 0=5" AND 1=8" 04DB 11FC09 LXI D,INCH5 04DE CAE404 JZ PRINCH 04E1 110F0A LXI D,INCH8 04E4 0E09 PRINCH: MVI C,TYPE 04E6 CD0500 CALL BDOS 04E9 111F0A LXI D,CTRMSG 04EC 0E09 MVI C,TYPE 04EE CD0500 CALL BDOS 04F1 CDC006 CALL GETTXT ; GET TEXT STRING POINTER IN DE 04F4 0E09 MVI C,TYPE 04F6 CD0500 CALL BDOS 04F9 CD0307 CALL CRLF 04FC E1 POP H 04FD E5 PUSH H ; GET MODE ADDRESS AGAIN 04FE 23 INX H 04FF 23 INX H 0500 23 INX H ; POINT TO BYTE 2 0501 BIT 4,M 0503 CA0C05 JZ SD ; SINGLE DENSITY IF ZERO 0506 11810A LXI D,DDMSG ; DOUBLE DENSITY DRIVE MESSAGE 0509 C30F05 JMP DD 050C 11640A SD: LXI D,SDMSG ; SINGLE DENSITY DRIVE MESSAGE 050F 0E09 DD: MVI C,TYPE 0511 CD0500 CALL BDOS 0514 E1 POP H 0515 E5 PUSH H 0516 23 INX H 0517 23 INX H 0518 23 INX H 0519 BIT 6,M ; CHECK THE SIDE BIT 051B CA2405 JZ SS ; SINGLE SIDED IF ZERO 051E 114C0A LXI D,DSMSG ; DOUBLE SIDED DRIVE MESSAGE 0521 C32705 JMP DDS 0524 11340A SS: LXI D,SSMSG ; SINGLE SIDED DRIVE MESSAGE 0527 0E09 DDS: MVI C,TYPE 0529 CD0500 CALL BDOS 052C E1 POP H 052D E5 PUSH H ; GET MODE ADDRESS AGAIN 052E 23 INX H 052F 23 INX H 0530 BIT 0,M ; IF QT MEDIA, ASSUME DRIVE SAME 0532 JRNZ T192 0534 BIT 1,M ; NOT QT MEDIA, CHECK DRIVE 0536 JRNZ T192K 0538 23 . A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST INX H 0539 BIT 5,M ; BIT SET IF 96 TPI MEDIA 053B C25105 JNZ T96 ; MEDIA IS ST, DRIVE NOT QT 053E 2B DCX H 053F BIT 5,M ;CHECK FOR DRIVE "DT" 0541 23 INX H 0542 CA4B05 JZ T48 0545 11EA0A LXI D,HALFTK ; HALF TRACK MESSAGE 0548 C36C05 JMP HTRK 054B 119E0A T48: LXI D,T48MSG ; 48 TPI MESSAGE 054E C36C05 JMP HTRK 0551 11B70A T96: LXI D,T96MSG ; 96 TPI MESSAGE 0554 C36C05 JMP HTRK 0557 23 T192K: INX H 0558 BIT 5,M ; BIT SET IF 96 TPI MEDIA (QT DRIVE) 055A C26305 JNZ T192H 055D 11230B LXI D,HAF2TK ; 48TPI MEDIA IN QT DRIVE 0560 C36C05 JMP HTRK 0563 115D0B T192H: LXI D,HAF3TK ; 96TPI MEDIA IN QT DRIVE 0566 C36C05 JMP HTRK 0569 11D00A T192: LXI D,T192MSG ; 192 TPI MESSAGE 056C 0E09 HTRK: MVI C,TYPE 056E CD0500 CALL BDOS 0571 E1 POP H ; GET POINTER AGAIN 0572 E5 PUSH H 0573 23 INX H ; POINT TO SECOND BYTE 0574 23 INX H 0575 7E MOV A,M ; AND GET IT 0576 E60C ANI 00001100B ; BITS FOR STEP RATE 0578 BIT 7,M 057A JRZ SR00 057C SETB 4,A 057E 21530D SR00: LXI H,STRTBL ; STEP RATE TABLE 0581 0F RRC ; 0582 5F MOV E,A 0583 1600 MVI D,0 ; 16 BIT VALUE FOR OFFSET 0585 19 DAD D 0586 5E MOV E,M ; FIRST BYTE OF STEP RATE 0587 23 INX H 0588 56 MOV D,M ; AND THE SECOND 0589 EB XCHG 058A 22C40B SHLD STRATE ; SAVE TEXT IN MESSAGE 058D 11AF0B LXI D,STRMSG ; STEP RATE MESSAGE 0590 0E09 MVI C,TYPE 0592 CD0500 CALL BDOS 0595 11C40B LXI D,STRATE 0598 3AC40B LDA STRATE 059B FE20 CPI ' ' ; SKIP A CHARACTER IF A SPACE 059D C2A105 JNZ NSPC 05A0 13 INX D 05A1 0E09 NSPC: MVI C,TYPE 05A3 CD0500 CALL BDOS 05A6 119A0B LXI D,FMTSTR 05A9 0E09 MVI C,TYPE 05AB CD0500 CALL BDOS 05AE E1 POP H ; GET POINTER TO FORMAT ORIGIN BYTES 05AF 56 MOV D,M ; LOAD BYTES IN DE 05B0 23 INX H 05B1 5E MOV E,M 05B2 D5 PUSH D 05B3 CD7D04 CALL SERDP ; GET START OF FORMAT STRING TABLE IN HL 05B6 D1 POP D 05B7 010800 LXI B,8 05BA AF XRA A 05BB FMT1: SRLR D 05BD RARR E ;SHIFT AND WAIT FOR A CARRY... 05BF JRC FMT2 05C1 09 DAD B 05C2 JR FMT1 05C4 0608 FMT2: MVI B,8 05C6 5E FMT3: MOV E,M ; GOT FORMAT STRING - NOW PRINT 8 CHARACTERS 05C7 E5 PUSH H 05C8 C5 PUSH B ; HL = STRING START 05C9 0E02 MVI C,CONOUT 05CB CD0500 CALL BDOS 05CE C1 POP B 05CF E1 POP H 05D0 23 INX H 05D1 DJNZ FMT3 05D3 CD0307 CALL CRLF 05D6 C9 RET ; THIS FUNCTION PUTS THE MODE BYTE AT MINFO AND ; RETURNS A POINTER TO IT IN THE HL. IT ALSO PLACES ; POINTERS TO THE ACTUAL MODE BYTE AND MASK IN ; MODPTR AND MSKPTR AND THE DRIVE NUMBER IN DRVNUM ; 05D7 3A7E0D GETMOD: LDA NDRIVE ; GET LOGICAL DRIVE NUMBER 05DA 2A0301 LHLD SYSADR ; ADDRESS OF BIOS 05DD 116100 LXI D,LPTBL-3 ; OFFSET TO POINTER TO MIXER TABLE 05E0 19 DAD D 05E1 CDCB06 CALL HLIHL ; MIXER TABLE 05E4 5F MOV E,A ; USE LOGICAL DRIVE NUMBER AS OFFSET 05E5 1600 MVI D,0 ; INTO LOGICAL/PHYSICAL TABLE 05E7 19 DAD D 05E8 7E MOV A,M ; GET PHYSICAL DRIVE NUMBER 05E9 32780D STA DRVNUM ; AND SAVE IT AWAY 05EC FEFF CPI 0FFH 05EE C8 RZ ; RETURN IF NO DRIVE INSTALLED 05EF 015700 DROK: LXI B,SEARCH-3 ; ADDRESS OF SEARCH ROUTINE 05F2 2A0301 LHLD SYSADR 05F5 09 DAD B 05F6 4F MOV C,A ; SEARCH REQUIRES DRIVE NUMBER IN REG. C 05F7 CDBF06 CALL ICALL ;CALL MODULE-SEARCH WITH A=PHYSICAL DRIVE NUMBER 05FA DADC06 JC SYSERR 05FD 226B0D SHLD MODULE 0600 326D0D STA RELDSK ; ; CHECK IF DRIVER IS RECENT RELEASE (HAS MODE BYTES) ; DO THIS BY CHECKING FOR MULTIPLE STRINGS ; 0603 3E01 MVI A,1 ; MORE THAN ONE STRING IN THIS RELEASE 0605 E5 PUSH H ; SAVE MODULE ADDRESS 0606 CD4A06 CALL GETSTR 0609 E1 POP H ; RESTORE MODULE ADDRESS 060A B7 ORA A ; AND SEE IF THERE ARE 2 STRINGS 060B 3EFE MVI A,0FEH 060D C0 RNZ 060E 3E1E MVI A,30 ; A RIDICULOUS STRING NUMBER 0610 CD4A06 CALL GETSTR ; DE POINTS TO NULL (WE HOPE) 0613 EB XCHG ; MAKE IT HL 0614 2B DCX H ; POINT TO TERMINATOR 0615 7E MOV A,M 0616 FE24 CPI '$' ; IS IT A DOLLAR SIGN ? 0618 3EFE MVI A,0FEH 061A C0 RNZ ; ADDITIONAL CHECK ; A=RELATIVE DRIVE NUMBER ; HL=MODTBL 061B 2A6B0D LHLD MODULE ; START OF MODULE 061E 111000 LXI D,16 0621 19 DAD D ; POINTER TO MODE TABLE 0622 CDCB06 CALL HLIHL ; MODE TABLE 0625 3A6D0D LDA RELDSK 0628 87 ADD A 0629 87 ADD A 062A 87 ADD A ; *8 062B 5F MOV E,A 062C 1600 MVI D,0 062E 19 DAD D GOTADR: 062F 22720D SHLD MODPTR ; SAVE THE MODE BYTE POINTER 0632 EB XCHG 0633 210400 LXI H,4 ; +4 TO MASK 0636 19 DAD D 0637 22740D SHLD MSKPTR ; SAVE THE MODE BYTE MASK POINTER 063A 216E0D LXI H,MINFO ; INTERNAL STORAGE BUFFER 063D EB XCHG ; FROM HL TO DE FOR LDIR 063E 010400 LXI B,4 ; 4 BYTES 0641 LDIR ; TO STORE THE MODE BYTE INTERNALLY 0643 216E0D LXI H,MINFO ; RESTORE POINTER 0646 3A780D LDA DRVNUM 0649 C9 RET ; ; THIS SUBROUTINE SEARCHES FOR THE DRIVER TEXT STRING SPECIFIED ; BY THE ACCUMULATOR. STRINGS ARE NUMBERED 0-N. ; ON ENTRY: ; DE = POINTER TO DRIVER ; A = DESIRED STRING ; ON EXIT: ; DE = POINTER TO DESIRED STRING OR FIRST CHARACTER ; PAST THE LAST STRING (NULL IN LATER RELEASES) ; A = ERROR CODE 0 = FOUND, 0FFH = NOT FOUND ; 064A F5 GETSTR: PUSH PSW ; SAVE REQUESTED FIELD 064B 110C00 LXI D,12 ; POINT TO STRING VECTOR 064E 19 DAD D ; TO START OF STRINGS 064F CDCB06 CALL HLIHL 0652 22790D SHLD STRADR ; INITIAL TEXT POINTER 0655 AF XRA A 0656 327B0D STA GETERR ; CLEAR ERROR FLAG 0659 327C0D STA FLDNUM ; SET FIELD NUMBER 0 065C 3A7B0D NXTFLD: LDA GETERR ; CHECK ERROR FLAG 065F B7 ORA A 0660 C29E06 JNZ GETXIT ; ERROR IF NON ZERO 0663 22790D SHLD STRADR ; START OF SEARCH STRING 0666 0664 MVI B,100 ; SEARCH 100 CHARACTERS 0668 7E GETCHR: MOV A,M 0669 23 INX H ; POINT PAST SEPARATOR 066A FE24 CPI '$' ; FIELD TERMINATOR 066C CA8206 JZ CHKEND ; DOLLAR SIGN OR NULL 066F B7 ORA A 0670 CA8206 JZ CHKEND 0673 FE20 CPI ' ' 0675 DA7A06 JC SETERR 0678 DJNZ GETCHR 067A 3EFF SETERR: MVI A,0FFH 067C 327B0D STA GETERR ; SET ERROR FLAG 067F C39E06 JMP GETXIT 0682 3A7C0D CHKEND: LDA FLDNUM 0685 47 MOV B,A 0686 F1 POP PSW ; GET REQUESTED FIELD 0687 F5 PUSH PSW 0688 B8 CMP B ; IS THIS ONE CORRECT 0689 CA9E06 JZ GETXIT ; FOUND IF ZERO 068C 04 INR B ; INCREMENT FIELD NUMBER 068D 78 MOV A,B 068E 327C0D STA FLDNUM 0691 2B DCX H 0692 7E MOV A,M ; GET FIELD TERMINATOR 0693 23 INX H 0694 22790D SHLD STRADR ; SET NEW STRING ADDRESS 0697 B7 ORA A ; IS TERMINATOR A NULL ? 0698 C27A06 JNZ SETERR ; IF NOT IT'S A '$' AND WE'VE HIT END OF STRING 069B C35C06 JMP NXTFLD ; BEFORE FINDING FIELD 069E GETXIT: LDED STRADR ; STRING ADDRESS 06A2 F1 POP PSW ; CLEAN UP STACK 06A3 3A7B0D LDA GETERR ; ERROR FLAG 06A6 C9 RET ; THIS SUBROUTINE RESETS THE DRIVE THAT GOT THE NEW MODE BYTE ; 06A7 3A7E0D RESET: LDA NDRIVE ; GET DRIVE NUMBER 06AA 3C INR A ; START WITH 1-16 06AB 110100 LXI D,1 ; 1 FOR DRIVE A: 06AE 3D LRST: DCR A ; DECREMENT DRIVE NUMBER 06AF CAB906 JZ REST ; IF ZERO, THEN DE IS SETUP 06B2 SLAR E ; SHIFT LEFT WITH ZERO FILL 06B4 RALR D ; SHIFT LEFT WITH CARRY 06B6 C3AE06 JMP LRST ; KEEP SHIFTING 06B9 0E25 REST: MVI C,RESDRV ; BDOS RESET DRIVE FUNCTION 06BB CD0500 CALL BDOS 06BE C9 RET 06BF E9 ICALL: PCHL ; ; THIS FUNCTION RETURNS A TEXT STRING TO BE OUTPUT ; GETTXT: 06C0 2A6B0D LHLD MODULE ; GET MODULE ADDRESS 06C3 110C00 LXI D,STROFF ; ADDRESS TEXT STRING OFFSET 06C6 19 DAD D 06C7 5E MOV E,M ; MOVE TO DE 06C8 23 INX H 06C9 56 MOV D,M 06CA C9 RET ; ; LOAD HL INDIRECT THROUGH HL ; 06CB 4E HLIHL: MOV C,M 06CC 23 INX H 06CD 66 MOV H,M 06CE 69 MOV L,C 06CF C9 RET ; ; SPECIFIED DRIVE DOES NOT EXIST ; 06D0 11C10C NODRV: LXI D,NODRMS ; DRIVE NOT SYSGENED MESSAGE 06D3 C3F906 JMP ERXIT ; ; FDC DRIVER IS THE WRONG RELEASE LEVEL ; 06D6 11D60C WRONG: LXI D,WRGMSG 06D9 C3F906 JMP ERXIT ; ; DRIVE IS IN LOGICAL/PHYSICAL TABLE BUT HAS NOT BEEN ; LINKED IN. SYSTEM ERROR. ; 06DC 111C0D SYSERR: LXI D,SERMSG ; DRIVE NOT LINKED MESSAGE 06DF C3F906 JMP ERXIT ; ; DRIVER IS NOT FDC OR Z37 ; 06E2 11B309 FIXED: LXI D,DIFFER ; NOT FDC OR Z37 DRIVER 06E5 C3F906 JMP ERXIT ; ; THIS IS THE ERROR FOR CHANGING AN INVALID ITEM ; 06E8 11590C NOCHG: LXI D,CHGMSG ; CANNOT CHANGE A PARAMETER MESSAGE 06EB 0E09 MVI C,TYPE 06ED CD0500 CALL BDOS 06F0 11B107 LXI D,HALFHL 06F3 C3F906 JMP ERXIT ; ; BAD COMMAND LINE ERROR ; 06F6 11270C ENDERR: LXI D,BADMSG ; BAD COMMAND LINE MESSAGE 06F9 0E09 ERXIT: MVI C,TYPE ; ERROR EXIT 06FB CD0500 CALL BDOS 06FE DONE: LSPD OLDSP ; NORMAL EXIT 0702 C9 RET ; RESTORE ORIGINAL STACK POINTER 0703 11970B CRLF LXI D,CRLFMSG 0706 0E09 MVI C,TYPE 0708 CD0500 CALL BDOS 070B C9 RET ; DATA STORAGE ; 070C 546865204DHELP: DB 'The MODE utility is called in one of the following ways:' 0744 0D0A0A2020 DB CR,LF,LF,' MODE',CR,LF 0755 4F75747075 DB 'Outputs HELP information',CR,LF,LF 0770 2020202020 DB ' MODE d:',CR,LF 0781 446973706C DB 'Displays the present drive status to the user',CR,LF,LF 07B1 2020202020HALFHL: DB ' MODE d:arg1,arg2,arg3',CR,LF 07D0 5570646174 DB 'Updates the present status and displays it. Valid' 0801 2061726775 DB ' arguments are:',CR,LF,LF 0813 2020202020 DB ' DS or SS = double or single sided',CR,LF 083E 2020202020 DB ' QT, DT, ST = quad (192 tpi), double (96 tpi),',CR,LF 0875 2020202020 DB ' single (48 tpi), or',CR,LF 089F 2020202020 DB ' QTD, QTS, DTS = half track modes',CR,LF 08C9 2020202020 DB ' e.g. DTS is 48 tpi media in a 96 tpi drive.',CR,LF 0904 2020202020 DB ' DD or SD = double or single density',CR,LF 0931 2020202020 DB ' 1006B000B906CB23CB12C3AE060E25CD0500C9E982 :1006C0002A6B0D110C00195E2356C94E236669C9A9 :1006D00011C10CC3F90611D60CC3F906111C0DC3C8 :1006E000F90611B309C3F90611590C0E09CD05001D :1006F00011B107C3F90611270C0E09CD0500ED7BDA :10070000840DC911970B0E09CD0500C954686520E9 :100710004D4F4445207574696C6974792069732064 :1007200063616C6C656420696E206F6E65206F6616 :100730002074686520666F6C6C6F77696E672077D0 :100740006179733A0D0A0A20202020202020204DB4 :100750004F44450D0A4F7574707574732048454CAD :100760005020696E666F726D6174696F6E0D0A0A52 :1007700020202020202020204D4F444520643A0D89 :100780000A446973706C61797320746865207072B3 :100790006573656E74206472697665207374617424 :1007A000757320746F2074686520757365720D0A07 :1007B0000A20202020202020204D4F444520643A4C :1007C000617267312C617267322C617267330D0A76 :1007D0005570646174657320746865207072657308 :1007E000656E742073746174757320616E64206427 :1007F0006973706C6179732069742E2056616C691D :100800006420617267756D656E7473206172653AFC :100810000D0A0A20202020202020204453206F721F :10082000205353203D20646F75626C65206F7220E9 :1008300073696E676C652073696465640D0A2020B6 :1008400020202020202051542C2044542C2053546C :10085000203D20717561642028313932207470691F :10086000292C20646F75626C6520283936207470DD :1008700069292C0D0A202020202020202020202043 :100880002020202020202020202073696E676C65A6 :100890002028343820747069292C206F720D0A20AA :1008A000202020202020205154442C205154532C0F :1008B00020445453203D2068616C6620747261634B :1008C0006B206D6F6465730D0A202020202020208E :1008D00020202020202020652E672E2044545320E5 :1008E000697320343820747069206D6564696120F3 :1008F000696E2061203936207470692064726976CF :10090000652E0D0A20202020202020204444206F26 :1009100072205344203D20646F75626C65206F72B5 :100920002073696E676C652064656E736974790DF8 :100930000A202020202020202053362C2053333022 :100940002C206574632E203D2073746570207261C5 :10095000746520696E206D696C6C697365636F6E78 :1009600064730D0A20202020202020204D4D532C80 :10097000205A33372C205A333758206574632E2081 :10098000286D6564696120666F726D617473293BBF :1009900020746865205820696D706C6965732065E6 :1009A0007874656E64656420666F726D61742E0D77 :1009B0000A0A24447269766520413A2068617320EE :1009C0006120666978656420636F6E666967757219 :1009D0006174696F6E2077686963682063616E6E09 :1009E0006F742062652064657465726D696E6564FC :1009F000206279204D4F44452E0D0A24352E323584 :100A000020696E636820666C6F7070790D0A2438F7 :100A100020696E636820666C6F7070790D0A2420FF :100A2000202020202020436F6E74726F6C6C6572E2 :100A3000202D2024202020202020202020202020A5 :100A40005369646573202D20310D0A242020202055 :100A500020202020202020205369646573202D2031 :100A6000320D0A245265636F7264696E67204465B3 :100A70006E73697479202D2053696E676C650D0A59 :100A8000245265636F7264696E672044656E736992 :100A90007479202D20446F75626C650D0A24202026 :100AA000547261636B732070657220496E636820B5 :100AB0002D2034380D0A242020547261636B73207A :100AC00070657220496E6368202D2039360D0A2426 :100AD0002020547261636B732070657220496E63CD :100AE00068202D203139320D0A2420205472616390 :100AF0006B732070657220496E6368202D20343836 :100B000020747069206D6564696120696E203936D2 :100B1000207470692064726976652028522F4F29ED :100B20000D0A242020547261636B7320706572205B :100B3000496E6368202D20343820747069206D65FB :100B400064696120696E20313932207470692064D3 :100B5000726976652028522F4F290D0A24202054CF :100B60007261636B732070657220496E6368202D1B :100B700020393620747069206D6564696120696E62 :100B800020313932207470692064726976652028BA :100B9000522F4F290D0A240D0A2420202020202026 :100BA000466F726D61742054797065202D20242069 :100BB000202020202020205374657020526174650D :100BC000202D20243030206D696C6C697365636F53 :100BD0006E64730D0A242020202020202020202055 :100BE00020204472697665202D20413A202820205B :100BF00029202450524553454E5420436F6E666958 :100C00006775726174696F6E2069733A0D0A244EBC :100C1000455720436F6E66696775726174696F6EC0 :100C20002069733A0D0A24496E76616C6964206309 :100C30006F6D6D616E64206C696E65206F722063EC :100C40006F6D6D616E64206C696E65206172677591 :100C50006D656E74732E0D0A24546865207265717B :1 S6, S30, etc. = step rate in milliseconds',CR,LF 0964 2020202020 DB ' MMS, Z37, Z37X etc. (media formats); the X implies' 099E 2065787465 DB ' extended format.',CR,LF,LF,'$' 09B3 4472697665DIFFER: DB 'Drive ' 09B9 413A206861DIFD: DB 'A: has a fixed configuration which cannot ' 09E3 6265206465 DB 'be determined by MODE.',CR,LF,'$' 09FC 352E323520INCH5: DB '5.25 inch floppy',CR,LF,'$' 0A0F 3820696E63INCH8: DB '8 inch floppy',CR,LF,'$' 0A1F 2020202020CTRMSG: DB ' Controller - $' 0A34 2020202020SSMSG: DB ' Sides - 1',CR,LF,'$' 0A4C 2020202020DSMSG: DB ' Sides - 2',CR,LF,'$' 0A64 5265636F72SDMSG: DB 'Recording Density - Single',CR,LF,'$' 0A81 5265636F72DDMSG: DB 'Recording Density - Double',CR,LF,'$' 0A9E 2020547261T48MSG: DB ' Tracks per Inch - 48',CR,LF,'$' 0AB7 2020547261T96MSG: DB ' Tracks per Inch - 96',CR,LF,'$' 0AD0 2020547261T192MSG: DB ' Tracks per Inch - 192',CR,LF,'$' 0AEA 2020547261HALFTK: DB ' Tracks per Inch ]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3- 48 tpi media in 96 tpi drive (R/O)',CR,LF,'$' 0B23 2020547261HAF2TK: DB ' Tracks per Inch - 48 tpi media in 192 tpi drive (R/O)',CR,LF,'$' 0B5D 2020547261HAF3TK: DB ' Tracks per Inch - 96 tpi media in 192 tpi drive (R/O)',CR,LF,'$' 0B97 0D0A24 CRLFMSG DB CR,LF,'$' 0B9A 2020202020FMTSTR: DB ' Format Type - $' 0BAF 2020202020STRMSG: DB ' Step Rate - $' 0BC4 3030206D69STRATE: DB '00 milliseconds',CR,LF,'$' 0BD6 2020202020DRSTR: DB ' Drive - ' 0BEA 413A2028 DSKLT: DB 'A: (' 0BEE 2020292024DSKNM: DB ' ) $' 0BF3 5052455345TTLE0: DB 'PRESENT Configuration is:',CR,LF,'$' 0C0F 4E45572043TTLE1: DB 'NEW Configuration is:',CR,LF,'$' 0C27 496E76616CBADMSG: DB 'Invalid command line or command line arguments.',CR,LF,'$' 0C59 5468652072CHGMSG: DB 'The requested format is invalid for the specified drive.' 0C91 0D0A546865 DB CR,LF,'The complete configuration must be supplied',CR,LF,'$' 0CC1 413A20646FNODRMS: DB 'A: does not exist.',CR,LF,'$' 0CD6 5468652064WRGMSG: DB 'The driver module for ' 0CEC 413A206973WRGD: DB 'A: is incompatible with MODE.',CR,LF,'$' 0D0C 20696E6F70 DB ' inoperative.',CR,LF,'$' 0D1C 4472697665SERMSG: DB 'Drive is specified but not linked - ERROR IN SYSTEM-' 0D50 0D0A24 DB CR,LF,'$' 0D53 2036313232STRTBL: DB ' 6122030 3 61015' ; POSSIBLE STEP RATES, 2 BYTES EACH 0D63 070D151F04STEPTB: DB 7,13,21,31,4,7,11,16 0D6B 0000 MODULE: DW 0 0D6D 00 RELDSK: DB 0 0D6E 00000000 MINFO: DB 0,0,0,0 0D72 0000 MODPTR: DW 0 0D74 0000 MSKPTR: DW 0 0D76 0000 CMDPTR: DW 0 0D78 00 DRVNUM: DB 0 0D79 0000 STRADR: DW 0 0D7B 00 GETERR: DB 0 0D7C 00 FLDNUM: DB 0 0D7D 00 NEWARG: DB 0 0D7E 00 NDRIVE: DB 0 ; 0 TO 15 0D7F 00 CNFIG: DB 0 ; MMS=0, MMSD=1,Z17=2 (ALL + '0') 0D80 00 TRACK: DB 0 ; D OR S OR Q NIBBLE, WITH OPTIONAL D OR S NIBBLE 0D81 00 SIDE: DB 0 ; D OR S 0D82 00 DENSITY: DB 0 ; D OR S 0D83 00 STEPRT: DB 0 ; BINARY NUMBER 0D84 0000 OLDSP: DW 0 0D86 DS 32 0DA6 STACK: DS 0 0DA6 END  MODE d:',CR,LF 0781 446973706C DB 'Displays the present drive status to the user',CR,LF,LF 07B1 2020202020HALFHL: DB ' MODE d:arg1,arg2,arg3',CR,LF 07D0 5570646174 DB 'Updates the present status and displays it. Valid' 0801 2061726775 DB ' arguments are:',CR,LF,LF 0813 2020202020 DB ' DS or SS = double or single sided',CR,LF 083E 2020202020 DB ' QT, DT, ST = quad (192 tpi), double (96 tpi),',CR,LF 0875 2020202020 DB ' single (48 tpi), or',CR,LF 089F 2020202020 DB ' QTD, QTS, DTS = half track modes',CR,LF 08C9 2020202020 DB ' e.g. DTS is 48 tpi media in a 96 tpi drive.',CR,LF 0904 2020202020 DB ' DD or SD = double or single density',CR,LF 0931 2020202020 DB ' 00C600075657374656420666F726D617420697355 :100C700020696E76616C696420666F7220746865A5 :100C8000207370656369666965642064726976655E :100C90002E0D0A54686520636F6D706C6574652055 :100CA000636F6E66696775726174696F6E206D75CA :100CB000737420626520737570706C6965640D0AC9 :100CC00024413A20646F6573206E6F7420657869E3 :100CD00073742E0D0A2454686520647269766572F7 :100CE000206D6F64756C6520666F7220413A2069D3 :100CF0007320696E636F6D70617469626C652077D3 :100D0000697468204D4F44452E0D0A2420696E6F8A :100D100070657261746976652E0D0A244472697675 :100D20006520697320737065636966696564206214 :100D30007574206E6F74206C696E6B6564202D2055 :100D40004552524F5220494E2053595354454D2D30 :100D50000D0A242036313232303330203320363100 :100D6000303135070D151F04070B1000000000007F :100D70000000000000000000000000000000000073 :060D80000000000000006D :0000000000 7 :1007F0006973706C6179732069742E2056616C691D :100800006420617267756D656E7473206172653AFC :100810000D0A0A20202020202020204453206F721F :10082000205353203D20646F75626C65206F7220E9 :1008300073696E676C652073696465640D0A2020B6 :1008400020202020202051542C2044542C2053546C :10085000203D20717561642028313932207470691F :10086000292C20646F75626C6520283936207470DD :1008700069292C0D0A202020202020202020202043 :100880002020202020202020202073696E676C65A6 :100890002028343820747069292C206F720D0A20AA :1008A000202020202020205154442C205154532C0F :1008B00020445453203D2068616C6620747261634B :1008C0006B206D6F6465730D0A202020202020208E :1008D00020202020202020652E672E2044545320E5 :1008E000697320343820747069206D6564696120F3 :1008F000696E2061203936207470692064726976CF :10090000652E0D0A20202020202020204444206F26 :1009100072205344203D20646F75626C65206F72B5 :100920002073696E676C652064656E736974790DF8 :100930000A202020202020202053362C2053333022 :100940002C206574632E203D2073746570207261C5 :10095000746520696E206D696C6C697365636F6E78 :1009600064730D0A20202020202020204D4D532C80 :10097000205A33372C205A333758206574632E2081 :10098000286D6564696120666F726D617473293BBF :1009900020746865205820696D706C6965732065E6 :1009A0007874656E64656420666F726D61742E0D77 :1009B0000A0A24447269766520413A2068617320EE :1009C0006120666978656420636F6E666967757219 :1009D0006174696F6E2077686963682063616E6E09 :1009E0006F742062652064657465726D696E6564FC :1009F000206279204D4F44452E0D0A24352E323584 :100A000020696E636820666C6F7070790D0A2438F7 :100A100020696E636820666C6F7070790D0A2420FF :100A2000202020202020436F6E74726F6C6C6572E2 :100A3000202D2024202020202020202020202020A5 :100A40005369646573202D20310D0A242020202055 :100A500020202020202020205369646573202D2031 :100A6000320D0A245265636F7264696E67204465B3 :100A70006E73697479202D2053696E676C650D0A59 :100A8000245265636F7264696E672044656E736992 :100A90007479202D20446F75626C650D0A24202026 :100AA000547261636B732070657220496E636820B5 :100AB0002D2034380D0A242020547261636B73207A :100AC00070657220496E6368202D2039360D0A2426 :100AD0002020547261636B732070657220496E63CD :100AE00068202D203139320D0A2420205472616390 :100AF0006B732070657220496E6368202D20343836 :100B000020747069206D6564696120696E203936D2 :100B1000207470692064726976652028522F4F29ED :100B20000D0A242020547261636B7320706572205B :100B3000496E6368202D20343820747069206D65FB :100B400064696120696E20313932207470692064D3 :100B5000726976652028522F4F290D0A24202054CF :100B60007261636B732070657220496E6368202D1B :100B700020393620747069206D6564696120696E62 :100B800020313932207470692064726976652028BA :100B9000522F4F290D0A240D0A2420202020202026 :100BA000466F726D61742054797065202D20242069 :100BB000202020202020205374657020526174650D :100BC000202D20243030206D696C6C697365636F53 :100BD0006E64730D0A242020202020202020202055 :100BE00020204472697665202D20413A202820205B :100BF00029202450524553454E5420436F6E666958 :100C00006775726174696F6E2069733A0D0A244EBC :100C1000455720436F6E66696775726174696F6EC0 :100C20002069733A0D0A24496E76616C6964206309 :100C30006F6D6D616E64206C696E65206F722063EC :100C40006F6D6D616E64206C696E65206172677591 :100C50006D656E74732E0D0A24546865207265717B :1045E ANOTHR 037F BADCMD 0C27 BADMSG 0100 BASE 0000 BC 0005 BDOS 0007 BELL 039F BIT1 03B5 BIT3 03CD BIT4 0415 BIT5 0449 BIT6 021B CHAR 0C59 CHGMSG 0682 CHKEND 0D76 CMDPTR 0D7F CNFIG 0272 CONFIG 0001 CONIN 0006 CONIO 0002 CONOUT 0000 CPM 000D CR 0703 CRLF 0B97 CRLFMSG 0A1F CTRMSG 0019 CURDSK 0A81 DDMSG 050F DD 0527 DDS 0002 DE 0315 DENS 0D82 DENSITY 09B9 DIFD 09B3 DIFFER 0080 DMA 06FE DONE 02F8 DPROC 05EF DROK 0BD6 DRSTR 0D78 DRVNUM 0BEA DSKLT 0BEE DSKNM 000D DSKRES 0A4C DSMSG 06F6 ENDERR 015F ERROUT 0117 ERRVER 06F9 ERXIT 001B ESC 005C FCB 027C FIG0 02AC FIG1 029B FIG2 02AF FIG3 028C FIG5 037A FINISH 042A FIVE 06E2 FIXED 0D7C FLDNUM 05BB FMT1 05C4 FMT2 05C6 FMT3 0B9A FMTSTR 0399 GC0 0393 GC1 0668 GETCHR 000B GETCON 0D7B GETERR 05D7 GETMOD 064A GETSTR 06C0 GETTXT 000C GETVER 069E GETXIT 062F GOTADR 04A4 GOTNUM 0438 GSRT 01BB HADARG 0B23 HAF2TK 0B5D HAF3TK 07B1 HALFHL 0AEA HALFTK 070C HELP 0004 HL 06CB HLIHL 02C7 HPROC 056C HTRK 06BF ICALL 09FC INCH5 0A0F INCH8 022A INCMD 0004 IX 0004 IY 000A LF 0018 LOGIN 0064 LPTBL 06AE LRST 0D6E MINFO 0D72 MODPTR 0D6B MODULE 0357 MORE 020D MORSP 0497 MORTEN 0491 MPRINT 0D74 MSKPTR 0D7E NDRIVE 0D7D NEWARG 06E8 NOCHG 0134 NODPER 0CC1 NODRMS 06D0 NODRV 0164 NOGETDP 02B4 NOTCNF 04B0 NOZE 05A1 NSPC 0260 NXARG 026A NXOPT 036B NXOPT0 042C NXRT 065C NXTFLD 0D84 OLDSP 01E1 OUTMOD 04E4 PRINCH 000A RDCON 0D6D RELDSK 0025 RESDRV 06A7 RESET 06B9 REST 050C SD 0A64 SDMSG 03F6 SDT 005A SEARCH 047D SERDP 0D1C SERMSG 001A SETDMA 067A SETERR 0D81 SIDE 0105 SIGNON 0353 SOK 01FA SPCHK 02F6 SPROC 057E SR00 0524 SS 0A34 SSMSG 0195 ST0 0DA6 STACK 016D START 031C STEP 0D83 STEPRT 0D63 STEPTB 0D79 STRADR 0BC4 STRATE 0BAF STRMSG 000C STROFF 0D53 STRTBL 0103 SYSADR 06DC SYSERR 0569 T192 0563 T192H 0557 T192K 0AD0 T192MSG 054B T48 0A9E T48MSG 0551 T96 0AB7 T96MSG 0066 THREAD 0100 TPA 0D80 TRACK 02D3 TRK 02E3 TRK0 02F0 TRK1 0BF3 TTLE0 0C0F TTLE1 0009 TYPE 04C1 TYPNC 0383 UPMODE 0476 UPONE 0158 VERERR 2036 VERS 0CEC WRGD 0CD6 WRGMSG 06D6 WRONG 0068 ?SERDP 6 5468652064WRGMSG: DB 'The driver module for ' 0CEC 413A206973WRGD: DB 'A: is incompatible with MODE.',CR,LF,'$' 0D0C 20696E6F70 DB ' inoperative.',CR,LF,'$' 0D1C 4472697665SERMSG: DB 'Drive is specified but not linked - ERROR IN SYSTEM-' 0D50 0D0A24 DB CR,LF,'$' 0D53 2036313232STRTBL: DB ' 6122030 3 61015' ; POSSIBLE STEP RATES, 2 BYTES EACH 0D63 070D151F04STEPTB: DB 7,13,21,31,4,7,11,16 0D6B 0000 MODULE: DW 0 0D6D 00 RELDSK: DB 0 0D6E 00000000 MINFO: DB 0,0,0,0 0D72 0000 MODPTR: DW 0 0D74 0000 MSKPTR: DW 0 0D76 0000 CMDPTR: DW 0 0D78 00 DRVNUM: DB 0 0D79 0000 STRADR: DW 0 0D7B 00 GETERR: DB 0 0D7C 00 FLDNUM: DB 0 0D7D 00 NEWARG: DB 0 0D7E 00 NDRIVE: DB 0 ; 0 TO 15 0D7F 00 CNFIG: DB 0 ; MMS=0, MMSD=1,Z17=2 (ALL + '0') 0D80 00 TRACK: DB 0 ; D OR S OR Q NIBBLE, WITH OPTIONAL D OR S NIBBLE 0D81 00 SIDE: DB 0 ; D OR S 0D82 00 DENSITY: DB 0 ; D OR S 0D83 00 STEPRT: DB 0 ; BINARY NUMBER 0D84 0000 OLDSP: DW 0 0D86 DS 32 0DA6 STACK: DS 0 0DA6 END  SETERR: MVI A,0FFH 067C 32720D STA GETERR ; SET ERROR FLAG 067F C39E06 JMP GETXIT 0682 3A730D CHKEND: LDA FLDNUM 0685 47 MOV B,A 0686 F1 POP PSW ; GET REQUESTED FIELD 0687 F5 PUSH PSW 0688 B8 CMP B ; IS THIS ONE CORRECT 0689 CA9E06 JZ GETXIT ; FOUND IF ZERO 068C 04 INR B ; INCREMENT FIELD NUMBER 068D 78 MOV A,B 068E 32730D STA FLDNUM 0691 2B DCX H 0692 7E MOV A,M ; GET FIELD TERMINATOR 0693 23 INX H 0694 22700D SHLD STRADR ; SET NEW STRING ADDRESS 0697 B7 ORA A ; IS TERMINATOR A NULL ? 0698 C27A06 JNZ SETERR ; IF NOT IT'S A '$' AND WE'VE HIT END OF STRING 069B C35C06 JMP NXTFLD ; BEFORE FINDING FIEm MODE v3.106 $Requires CP/M 3.1 or MP/M $GETDP.REL not linked into system ${   { 4s 1     }0X|* •#^#V"e [_Rd»   *:} ~̓ͧ~͑! ~#"v O 6 *v  +"v ~#a{? 7>2} *v AQ2 2 2 2 AG:x2~  `+} yʴ¬#ʌ |~ʛ,ʛ ¬: y02 W rDSQGTxG~S(D(x 2 W>SGTDSx2 Wx2 W~0:0G~S,S S0:0OxGx2 z,k W+jz k+j2} >: ʟ0! <=()t u: ʵ/ݶw: /ݶw: ( (': ( (: I~!c  * 8#,xݶw}!n >Kr [t #=^[r ~#n *e Ϳ:x  ʤ G!00 }0°> o"  :}       *r ~##~         ###f  d   ###v$L '4   ##F 5N #nQ+n#K l l l#nc# l] l   ##~ ~(!S _ ^#V"     : ¡     V#^} :8 ^ #:~ *a _ ~2x W * OͿ"k 2m >J>>J+~$>*k  :m _ "r ! "t !n  !n :x  "y 2{ 2| :{ ž"y d~#$ʂʂ z>2{ Þ:| Gʞx2| +~#"y z\[y :{ :~ < =ʹ#î% *k  ^#VN#fi    Y   '   {    The MODE utility is called in one of the following ways: MODE Outputs HELP information MODE d: Displays the present drive status to the user MODE d:arg1,arg2,arg3 Updates the present status and displays it. Valid arguments are: DS or SS = double or single sided QT, DT, ST = quad (192 tpi), double (96 tpi), single (48 tpi), or QTD, QTS, DTS = half track modes e.g. DTS is 48 tpi media in a 96 tpi drive. DD or SD = double or single density S6, S30, etc. = step rate in milliseconds MMS, Z37, Z37X etc. (media formats); the X implies extended format. $Drive A: has a fixed configuration which cannot be determined by MODE. $5.25 inch floppy $8 inch floppy $ Controller - $ Sides - 1 $ Sides - 2 $Recording Density - Single $Recording Density - Double $ Tracks per Inch - 48 $ Tracks per Inch - 96 $ Tracks per Inch - 192 $ Tracks per Inch - 48 tpi media in 96 tpi drive (R/O) $ Tracks per Inch - 48 tpi media in 192 tpi drive (R/O) $ Tracks per Inch - 96 tpi media in 192 tpi drive (R/O) $ $ Format Type - $ Step Rate - $00 milliseconds $ Drive - A: ( ) $PRESENT Configuration is: $NEW Configuration is: $Invalid command line or command line arguments. $The requested format is invalid for the specified drive. The complete configuration must be supplied $A: does not exist. $The driver module for A: is incompatible with MODE. $ inoperative. $Drive is specified but not linked - ERROR IN SYSTEM- $ 6122030 3 61015   2m >J>>J+~$>*k  :m _ "r ! "t !n  !n :x  "y 2{ 2| :{ ž"y d~#$ʂʂ z>2{ Þ:| Gʞx2| +~#"y z\[y :{ :~ < =ʹ#î% *k  ^#VN#fi    Y   '   {5 DB ' arguments are:',CR,LF,LF 0813 2020202020 DB ' DS or SS = double or single sided',CR,LF 083E 2020202020 DB ' QT, DT, ST = quad (192 tpi), double (96 tpi),',CR,LF 0875 2020202020 DB ' single (48 tpi), or',CR,LF 089F 2020202020 DB ' QTD, QTS, DTS = half track modes',CR,LF 08C9 2020202020 DB ' e.g. DTS is 48 tpi media in a 96 tpi drive.',CR,LF 0904 2020202020 DB ' DD or SD = double or single density',CR,LF 0931 2020202020 DB '  Ó*"r*r"ÿ<:g:!͐*f}D! ~6 t!rͷ֏O(^ƏƏƏ  :Function = File = !,$"h ! 9"f! ͉:2t™:!=Hgo :O*;*͂:A2=/::0! dگ61#d ڸïp#:w#6 !6 :6 *#!)6.#)͂ O(BDOS > wM  2*7w#6?#7 .,:;[]=<>| !?]45#Ra{i_p# l s s l ls:¬MA͓ : 8:j O ! [q s#r! :j O ! ^#VSq *o  ~ #>(#~(>MOG#n( !C[q ! N#F ! F ?2^#V+ɷ*o ~v7*q q#p N#fi * B" * s#r#6 "  CC Cs :A2i`z n& +c 2*"* "*o ~ ###v(~!O N#fi{*m :?O!~O/ͩq!> !;!:wK:D=2>22ɯ B !  % $ ) 3 - 1 Q 5 ` 9 o = A     Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} !_~2#  2>:P 2@!:@U! "":ӆ͡GӄӅ<ӂ>Ӄ> ӇͱG.ۀ x !ۀ *"*" :>:@U> *o ~<<_ !~#fo"*o #F:ӆ͡>Ӂ*:@3 }(  }8o<:@U [} xʻ }ӄ|Ӆ:Ӄ>ӂ> 2?i(H:?Ӈͱ(>ۇG 8_(4>02?i(%:?Ӈ &ۇ_ } ͱ(ۇG ɯ<& } ˏ& `ۇ( } =2>ہ( w͡ ͡(>Ӈͱ(ۇG կ2>:ӆz%ۄ ۅ1( >Ӆ>1ӄ>pӇ>ӆ& ۇw}& ۇ/}     ^   vers equ '0e' ; March 18, 2017 17:04 drm "FDC3KP.ASM" ;********************************************************* ; Floppy Disk I/O module for CP/M 3.1 on KAYPRO ; Copyright (c) 1986 Douglas Miller ;********************************************************* MACLIB Z80 extrn @dph,@rdrv,@side,@trk,@sect,@dma,@dbnk,@dstat extrn @dtacb,@dircb,@scrbf,@rcnfg,@cmode extrn ?bnksl,?timot,?getdp extrn ?halloc false equ 0 true equ not false ; Ports and Constants fdc equ 010h ;floppy disk controller sysctl equ 014h ;floppy disk control bits ********************************************************* ** FDC (WD1793-02 Floppy Disk Controller) ********************************************************* FDCSTAT equ FDC+0 FDCCOMD equ FDC+0 FDCTRK equ FDC+1 FDCSEC equ FDC+2 FDCDATA equ FDC+3 dev0 equ 33 ; first drive in system ndev equ 3 ; # of drives is system LABLEN EQU 19H ; LENGTH OF Z37 DISK LABEL LABEL EQU 04H ; POSITION OF LABEL IN SECTOR 0 LABHTH EQU 05H ; START OF "HEATH EXTENSION" IN SECTOR 0 MODE2S EQU 00000001H ; DOUBLE SIDED LABDPB EQU 0DH ; START OF DPB IN SECTOR 0 LABVER EQU 00 ; LABEL VERSION NUMBER DPEH37 EQU 60H ; I.D. ;--------- Start of Code-producing Source -------------- cseg ;put only whats necessary in common memory... dw thread db dev0,ndev jmp init jmp login jmp read$fdc jmp write$fdc dw string dw dphtbl,modtbl string: DB 'KAYPRO ',0,'Floppy Disk Controller ',0,'3.10' dw vers db '$' modtbl: DB 00000000b,00000001b,01010000B,01011000B ; drive 33 kaypro,DS,ST,5" db 10000000b,00000000b,11110010b,00000000b DB 00000000b,00000001b,01010000B,01011000B ; drive 34 kaypro,DS,ST,5" db 10000000b,00000000b,11110010b,00000000b DB 00000000b,00000001b,01010000B,01011000B ; drive 35 kaypro,DS,ST,5" db 10000000b,00000000b,11110010b,00000000b motor$off: db 0 ;must be directly after MODTBL selmsk: db 0 ; motoff: lda motor$off cpi true rz lda selmsk mov b,a ; all drives are the same, any mode will do? lda modtbl+2 bit 1,a ; QT drive? in sysctl jrnz motoff0 ani 10101111b ; motor off motoff0: ora b ; select off out sysctl mvi a,true sta motor$off ret dpb0: ds 17 ;disks may have labels. dpb1: ds 17 ; dpb2: ds 17 ; savNMI: ds 1 savSTK: ds 2 ds 8 rwSTK: ds 0 type$II$ext: lda @dbnk call ?bnksl lxi h,0066h mov a,m mvi m,(RET) sta savNMI lhld @dma mov a,e mov e,c mvi c,fdcdata di out fdccomd ret ;jump to appropriate routine rd4: hlt rd42: INI ; or OUTI jnz rd4 rd3: hlt rd32: INI ; or OUTI jnz rd3 rd2: hlt rd22: INI ; or OUTI jnz rd2 rd1: hlt rd12: INI ; or OUTI jnz rd1 ei hlt rd0: in fdcstat rrc jrc rd0 rlc ana d push psw mvi a,11010000b ;reset 1797 to TYPE$I status out fdccomd ; in fdcstat ; lda savNMI sta 0066h mvi a,0 call ?bnksl pop psw lspd savSTK ret thread equ $ ;must be last statement in "cseg" dseg ;put most everything in banked memory... dphtbl: dw 0,0,0,0,0,0,dpb0,csv0,alv0,@dircb,@dtacb,0ffffh d0h: db 0 ;(hash buffer bank number) dw 0,0,0,0,0,0,dpb1,csv1,alv1,@dircb,@dtacb,0ffffh d1h: db 0 dw 0,0,0,0,0,0,dpb2,csv2,alv2,@dircb,@dtacb,0ffffh d2h: db 0 csv0: ds (1024)/4 ;max dir entries: 1024 csv1: ds (1024)/4 csv2: ds (1024)/4 alv0: ds (1351)/4 ;max dsk blocks: 1351 alv1: ds (1351)/4 alv2: ds (1351)/4 ; Max DRM+1 is 1024 (getdp3kp.asm) init: ; TODO: detect Kaypro 10 (only one floppy) and do not init all 3. lda 0052h ; gift from loader: select mask sta selmsk lda 0051h ; gift from loader: drive(s) type cpi 1 ; ST (or at least not QT) jrz initST cpi 2 ; QT jrz initQT ; else error, just leave as-is init0: ; use max hash size ever needed, even if QT drives not installed. ; Even if we have 5 drives (2 win, 3 flpy) we still won't ; consume all the hash space (~55K). It is not fatal if we try ; to allocate more hash than available, just sub-optimal for those ; drives that fail. lxi b,1024*4 ; safe value - the max ever used lxi d,d0h-2 call ?halloc lxi d,d1h-2 call ?halloc lxi d,d2h-2 call ?halloc ; IN fdcstat ; CLEAR WD-1793 from power-on (or whatever) push psw jmp setmot ; set timeout in case no more activity ; RET initST: lxi h,modtbl+2 mvi b,3 ist0: res 5,m res 1,m res 0,m inx h res 5,m lxi d,7 dad d djnz ist0 jr init0 initQT: lxi h,modtbl+2 mvi b,3 iqt0: setb 5,m setb 1,m setb 0,m inx h setb 5,m lxi d,7 dad d djnz iqt0 jr init0 login: pushix ;save IX lixd @cmode inxix inxix sixd cmode ;save cmode+2 for faster access to modes xra a sta selerr ; NO SELECT ERROR (YET) bitx 7,+1 ; SHOULD WE READ TRACK 0 SECTOR 0 ? cnz physel bitx 7,+0 ; IS IT A 5.25" DISK ? jrnz login1 lda selerr ora a ; was there a select error cz physel3 ; CHECK FOR HALF TRACK: must update DPB. login1: popix lda selerr ;return error code, error during configuration. ora a ret physel: lxi h,0 ; shld @trk ; TRACK 0 shld @sect ; SECTOR 0 lhld @scrbf ;use BIOS scratch buffer to read Z37 label. shld @dma ;we must also make sure that bank 0 is selected. xra a sta @dbnk ;set disk bank=0 (the bank we're in now) sta @side ;side=0 STA MODFLG ; RESET CHANGED MODE FLAG mvi a,true ; flag a select operation sta selop MVI A,5 ; 5 RETRYS FOR A SELECT OPERATION STA RETRYS CALL READ ; TRY READING LABEL AT DENSITY ; CURRENTLY INDICATED IN TABLES JZ PHYSEL1 ; BR IF SUCCESSFUL bitx 7,+0 jnz physel6 ; if 8" error out MVI A,5 ; RESET RETRYS TO 5 STA RETRYS STA MODFLG ; SET CHANGED MODE FLAG ; IX=mode bytes ldx a,+1 ; TRY OTHER DENSITY XRI 00010000b stx a,+1 CALL READ ; TRY TO READ LABEL jrz physel1 ldx a,+1 xri 00010000b ; return mode bytes to former state stx a,+1 jmp physel6 ; jmp to error PHYSEL1:XRA A ; ZERO ACCUM. MVI B,LABLEN ; GET LENGTH OF LABEL lhld @scrbf LXI d,LABEL dad d CHKLAB1:ADD M INX H DJNZ CHKLAB1 INR A JRZ PHYSEL2 ; BR IF CORRECT CHECKSUM LDA MODFLG ORA A ; MODE BEEN CHANGED ? jz physel7 ; NO KEEPING OLD MODE BYTES ldx a,+1 xri 00010000b ; return mode bytes to former state stx a,+1 jmp physel6 ; jmp to error ; ; EXTRACT MODE INFORMATION FROM LABEL ; physel2: lhld @scrbf lxi d,LABHTH dad d ; HL POINTS TO HEATH EXTENSION IN LABEL ldx b,-1 ; keep old format ldx c,-2 mvix 0,-1 mvix 0,-2 mov a,m ani 111$00000b cpi 001$00000b ; z100 formats jrnz nf1 setx 5,-1; ; set mode byte jr setmode nf1: cpi 011$00000b ; z37 jrnz nf2 bit 2,m ; check for extended density jrz gf1 setx 4,-1 ; z37x jr setmode gf1: liyd @scrbf ; get cpm sectors per physical sector ldy a,+labhth+2 cpi 4 ; see if 512 byte sectors - if so set to z100 jrnz gf0 ; this is in here because the Z100 puts the setx 5,-1 ; device type code in the label on 5" jr setmode gf0: setx 3,-1 ; z37 jr setmode ;; currently no 8" support in this module nf2: ; cpi 100$00000b ; z47 ; jrnz nf3 ; bit 2,m ; check for extended density ; jrz gf2 ; setx 6,-1 ; z47x ; jr setmode ;gf2: setx 5,-1 ; jr setmode nf3: ; cpi 110$00000b ; z67 ; jrz f1 ; keep old mode if device type not valid stx b,-1 stx c,-2 jmp physel7 ;f1: setx 7,-1 ; z67 setmode: mov a,m ; get flag byte bit 3,a ; track density bit jrz gs0 setx 5,+0 ; set drive and media to dt setx 5,+1 jr gs2 gs0: resx 5,+0 resx 5,+1 gs2: bit 1,a ; density bit jrz gs1 setx 4,+1 jr gs3 gs1: resx 4,+1 gs3: bit 0,a ; sides bit jrz gs4 setx 6,+1 jr gs6 gs4: resx 6,+1 gs6: lhld @cmode call ?getdp ; setup mode bytes jnz physel6 ; error if format doesnt exists liyd @dph ; set dpb addr in dph sty c,+0 ; store XLAT address in DPH sty b,+1 ldy l,+12 ; get DPB address in DPH ldy h,+13 xchg lhld @scrbf lxi b,labdpb dad b lxi b,15 ldir ; move dpb xchg ; hl points to psh byte (15) liyd @scrbf ldy a,+labhth+2 mov b,a ; save CP/M sectors per physical sector mvi c,0 pshlp srlr a ; rolate LSB into  1! |G^ >">"! }">">"!E" > $> >$>O#>#>J!! }#>! }! }!^#V#z ~##ں O +~#! Gy ҳ s#r#<GyOx !  N#fiOf ” ï f M  * "*} "* "* "* "!x  :| O:2B ͏ | >2z͏ < 2 ͏ @,͏ z͏ |2y2 f Ç |  f *u |Ç :yG 8!  )>2 2 ! " *"  !  @ ) !  @ ) !  @ )!~((#### y p#q#s#ro ͏ v ʍ  !  A$w#Y$  : ! ܐ : 2: 2: 2>2 : ͨ G: x(dNG2 ! m : ͨ O : ͨ =(G o> g"::2 :2 :2 *m>2  x 7R0x >2 7ZxNd8dͶ 2 xͶ 2 ! {Oz 8 YW#x 8xͶ 2 2 {Ͷ 2 : ͨ W: ͨ B(0 O= 0 : ͨ 88O: ͨ G ??OU D (0y xy(DGy<2 > >$ !  A~$# w++~'w0#~'w+ GOxGd0d 0 !!!! !  y2j !_ ~(k2k OC͗8a2l "m  ^#V#N#F:l o& "o @ AO :l O "q 8)2>͓ : 8:j O ! [q s#r! :j O ! ^#VSq *o  ~ #>(#~(>MOG#n( !C[q ! N#F ! F ?2^#V+ɷ*o ~v7*q q#p N#fi * B" * s#r#6 "  CC Cs :A2i`z n& +c 2*"* "*o ~ ###v(~!O N#fi{*m :?O!~O/ͩq!> !;!:wK:D=2>22ɯ B !  % $ ) 3 - 1 Q 5 ` 9 o = A     !_~2#  2>:P 2@!:@U! "":ӆ͡GӄӅ<ӂ>Ӄ> ӇͱG.ۀ x !ۀ *"*" :>:@U> *o ~<<_ !~#fo"*o #F:ӆ͡>Ӂ*:@3 }(  }8o<:@U [} xʻ }ӄ|Ӆ:Ӄ>ӂ> 2?i(H:?Ӈͱ(>ۇG 8_(4>02?i(%:?Ӈ &ۇ_ } ͱ(ۇG ɯ<& } ˏ& `ۇ( } =2>ہ( w͡ ͡(>Ӈͱ(ۇG կ2>:ӆz%ۄ ۅ1( >Ӆ>1ӄ>pӇ>ӆ& ۇw}& ۇ/}     ^   :R 2:Q ((1  m!ˮˎˆ#ˮ !# *o ##""2"~ą ~ :":"! ""*~"s 222!">2 ">2"U ~º>2"2!"~wU( ~wú*~ #<(:!"ʿ~wú*~ FN6 6 ~ .` !V( *~~  pqÿ~_(  O(G(*o vº*q q pn f *~  *~~G ?ڴ q#p>2"a! "6 5 8Ͷ!8H!!!!!:c 0 *"F#N(((: ˀ˩yq+Oxp>2Ͷ!8h(˩H(ˀˀH ˩>2"*o ##""D 8:<: " > 2! D*"n(#n( 82c @ *"#~! 2c [s R:c : " :" <> (_!"5_~ Ҧ: "¦͞! !æ    { 2"222"s1:"O!O F#N#fi ! :W/G:l O*"# ͼ bC { 7ɯO&  { % 7ɷO*q  >_#> W2"*"N#~/ I(A `2%"5 !"6#6 ":Oyʶ!:%"gx0XDol(ˠ! @t(! 5! .! %- o!g}:c 0|!" 57!"#57~ 0͞!>2"Ͷ!!:%"OH!q!q!X1>  .H! - !> >:"082c >:O滱  CRT  !Y+ w#*A "Z+*D "]+*F "_+>:Y+œ$y" %y[]+i$u$:[+@2q+*]+:[+_W2[+Rͻ":Z+8_#<2Z+*]+P zW"]+K_+B0  V$:Z+ȷ=2Z+*]+P R:[+ :Z+(=2Z+>P=2[+[]+>O2[+*]+O :[+O"[]+<2[+W%!\+y0(=(=(=(=(=(%=(0=(4~w~w~w~w`> y:\+2\+>@2q+*Z+"b+:\+ 2\+!\+y0(=(=(=(=(=(=(!=(0~w~w~w~w ~w*b+| 2d+} 2f+$:\+2\+! M:f+ G( P _:d+ PO2[+{2Z+ [_+"V$ >yxO$A Q A YD$zWD$:\+͐$D$͐$c$!|g!Y+6  yR&Eh'AG2a+6 :a+Bb#Cʼ#y2f+6 y2d+:a+=$*l( s(6 y2g+6y2{,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FFe+:a+L*D *(> ʻ" "(ʫ*ʰ**# L# #K+d">2Y+:\+ (6*_+P |gT] |gͻ%!P **_+P |g"_+ V$*_+P |g"_+ V$*_+|g!P *x%x|y}>%xzy{>#zW|g &x|y}>&xzy{> x%&xF&x|y}>a&xzy{>#zW|g&x|y}>&xzy{>++ xE&&ͻ":Z+'[]+!P * 0DO |gDMR|g[_+R0#! R|`G}iO@&^%*]+P "PYDM|W]*_+ |gGMR0! R DM*]+ͻ%*_+0|W]!P *:Z+ (*_+P R|g V$*]+K_+B0! B|gK]+ |GM! |GM*_+0|g!P |gͻ%*]+P B|g:[+O !P B**]+:[+_ R|W]*]+ͻ%!P B**_+P B|g"_+"(*ҫ*D*_+/P |W] |g! = DM@&*]+T]:[+O>PO |gͻ%:[+o& *ë*> 2h+>2h+:d+ _:f+ WzdG::{_>8(2j+{_*_+BKP  Y|W]Sk+[)( >2i+:j+)[k+͞)2a+(:h+:a+[k+͐):i+/7:  %P  !$  @$ A U BI* BI*  $     @  "DHI$I$HHHD@@H$$  A @  "I$  H $@@  "A "I " $  @ @B@ BA"!  $    I$  D@ ! H      T *  $A$HH  $@@       @@   U U@  I$  @D $$!$H        H!I$ B@   @ HB HI $$    H    $@  @  @ A"$ @H D H@HH "D" A B@  H  @ B ! HB !B@ @ @         A" I  D!      B@  B @   $D!B  ! @ @ H  $DD" $ HB  $B   @ @H   !  @  ,(Ny,N++ >yx+8 xɯLPT  >,(y@@$ R _   $  _   $ U  LXI D,INCH8 PRINCH: MVI C,TYPE CALL BDOS LXI D,CTRMSG MVI C,TYPE CALL BDOS CALL GETTXT ; get text string pointer in DE MVI C,TYPE CALL BDOS call crlf POP H PUSH H ; get mode address again inx h inx h INX H ; point to byte 2 BIT 4,M JZ SD ; single density if zero LXI D,DDMSG ; double density drive message JMP DD SD: LXI D,SDMSG ; single density drive message DD: MVI C,TYPE CALL BDOS POP H PUSH H inx h inx h inx h BIT 6,M ; check the side bit JZ SS ; single sided if zero LXI D,DSMSG ; double sided drive message JMP DDS SS: LXI D,SSMSG ; single sided drive message DDS: MVI C,TYPE CALL BDOS POP H PUSH H ; get mode address again inx h inx h INX H bit 5,m ; bit set if 96 tpi JNZ T96 dcx h bit 5,m ;check for drive "DT" inx h jz t48 LXI D,HALFTK ; half track message JMP HTRK T48: LXI D,T48MSG ; 48 tpi message JMP HTRK T96: LXI D,T96MSG ; 96 tpi message HTRK: MVI C,TYPE CALL BDOS POP H ; get pointer again PUSH H INX H ; point to second byte inx h MOV A,M ; and get it ANI 00001100b ; bits for step rate bit 7,m jrz sr00 setb 4,a sr00: LXI H,STRTBL ; step rate table rrc ; MOV E,A MVI D,0 ; 16 bit value for offset DAD D MOV E,M ; first byte of step rate INX H MOV D,M ; and the second XCHG SHLD STRATE ; save text in message LXI D,STRMSG ; step rate message MVI C,TYPE CALL BDOS LXI D,STRATE LDA STRATE CPI ' ' ; skip a character if a space JNZ NSPC INX D NSPC: MVI C,TYPE CALL BDOS lxi d,fmtstr mvi c,type call bdos POP H ; get pointer to format origin bytes mov d,m ; load bytes in de inx h mov e,m push d call serdp ; get start of format string table in hl pop d lxi b,8 xra a fmt1: srlr d rarr e ;shift and wait for a carry... jrc fmt2 dad b jr fmt1 fmt2: mvi b,8 fmt3: mov e,m ; got format string - now print 8 characters push h push b ; hl = string start mvi c,conout call bdos pop b pop h inx h djnz fmt3 call crlf ret ; this function puts the mode byte at MINFO and ; returns a pointer to it in the HL. It also places ; pointers to the actual mode byte and mask in ; MODPTR and MSKPTR and the drive number in DRVNUM ; GETMOD: LDA NDRIVE ; get logical drive number LHLD sysadr ; address of BIOS LXI D,lptbl-3 ; offset to POINTER TO mixer table DAD D CALL HLIHL ; MIXER TABLE MOV E,A ; use logical drive number as offset MVI D,0 ; into logical/physical table DAD D MOV A,M ; get physicalh+:a+͐):i+/$[k+͞) #:h+( :j+/G:i+:i+G:j+[k+e):h+( :j+G:i+:j+/G:i+zWq)zWq)̓) >yx|)A Q A Yͨ)q)ͨ)_)!"|g{ _z W0D 2h+>2h+ [f+ʹ)Sf+2o+[d+ʹ)Sd+2p+W:o+_):f+W:g+>8>2m+:d+_:e+>8>2n+:o+O:p+DM! 8(.):e+:n+_ 0:m+W):g+:m+W 0:n+_):g+:m+W:n+_*M:\+  :Z+0DGP ! * )!P []+:[+OGBK+:\+2\+[]+! (! +xzWy{>+> $+xzy{><++| ɯ2[+2Z+*_+" KEYBD !~~0_W~@G+~悳_##N >yAyQ+ʮ+ְ!wgNO ~ɯ+(y>DCE DTE MODEM xO_ P!+! ,+~~0_W~@G+~悳_##N >yAyQNˑV~ 0=yl,(Nx,N yxy͉,(Ny,N++ >yx+8 xɯLPT  >,(y@@$ R _   $  _   $ U   $      [ ?       (          @  (  @    ?       (          ; @  (   @        @        ; @  P    P    (  ?   (  ?   D  F       ; December 21, 1985 10:46 drm "GETDP3KP.ASM" maclib Z80 ; $-MACRO @ equ -1 ; CP/M 3.0 system routine to select a DPB and sector translation table ; given the mode bytes (4) **************************************************** * label: calcdpb spt,spb,bpd,dpd,nst,pss,exd[,flg] * * spt = Sectors per Track * spb = Sectors per allocation Block * bpd = allocation Blocks per Disk (max (DS)) * dpd = Directory entries per Disk * nst = Number of System Tracks * pss = Physical Sector Size (bytes) * exd = Extra Directory entries reserved * [flg]= optional flag to intentionally produce incorrect EXM * (used to maintain compatability with previous formats) * calcdpb macro ?spt0,?spb0,?dsm0,?drm0,?off0,?pss0,?exd0,?flg ?bsm set ?spb0-1 ?exm set ?bsm shr 3 if ?dsm0 gt 256 ?exm set ?exm shr 1 endif if not NUL ?flg ?exm set ?exm shr 1 endif ?cks set ?drm0/4 ?exs set ?exd0/4 ?bsh set 0 ?@ set ?spb0 rept 8 ?@ set ?@ shr 1 if ?@ eq 0 exitm endif ?bsh set ?bsh+1 endm ?al0 set 0 rept (?cks+?exs+?bsm)/?spb0 ?al0 set (?al0 shr 1) or 10000000$00000000b endm ?al1 set low ?al0 ?al0 set high ?al0 ?psh set 0 ?psm set 0 ?@ set high ?pss0 rept 8 if ?@ eq 0 exitm endif ?psh set ?psh+1 ?psm set (?psm shl 1) or 1 ?@ set ?@ shr 1 endm dw ?spt0 db ?bsh,?bsm,?exm dw ?dsm0-1,?drm0-1 db ?al0,?al1 dw ?cks,?off0 db ?psh,?psm endm ; Entry: HL = points to Mode bytes ; Exit: A = error code (0 if DPs found) ; DE = points to DPB ; BC = points to sector translation table (or BC=0) ; HL = offset from ?serdp to beginning of format string table ; Uses 2 levels of stack. ; public ?getdp,?serdp cseg ;for now we'll put it all in common memory. ?serdp: ;user has to tell us where we are. lxi b,PTRTBL-?serdp ;HL=memory address of "?serdp" dad b ;DE=mode bytes xchg jr gd1 ?GETDP: lxi d,ptrtbl gd1: PUSH H ; save mode byte pointer push d ;save parameter table address mov c,m ;no need to mask format origin code. inx h mov b,m inx h MOV A,M ; get first mode byte ani srm0 ; mask FIRST BYTE MOV E,A INX H ; and point to the second MOV A,M ani srm1 ; mask SECOND BYTE MOV D,A pop h ; table lookup... NXDPB: MOV A,M ; format origin code. inx h ana c ;compare it: if the format requested matches jrnz got1 ;(if the bit is set in both DPB and requested mov a,m ; mode ([NZ] condition) then we have a match.) ana b ;check for possible extend format origin jrz nxd1 ;... got1: inx h MOV A,M ; get first byte INX H ani srm0 ;mask it also CMP E ;compare to target mode jrnz NXD3 MOV A,M ; and the second ani srm1 ;mask it CMP D ;compare it jrnz NXD3 inx h mov e,m ;pick up DPB inx h mov d,m inx h mov c,m ;pick up XLAT also inx h mov b,m xchg ;DE=table pointer, HL=DPB xthl ;put DPB on stack, get HL=requested mode inx h inx h ;point past "format origin" push b ;put XLAT on stack. xchg lxi b,-5 dad b ;point back to table's modes xchg ; ldax d ;get "excess" mode bits. ani xsm0 ;mask in bits to give caller. mov c,a mvi a,(not xsm0) and 0ffh ana m ;clear callers bits prior to setting again ora c ;complete callers mode bytes mov m,a inx h inx d ldax d ;get "excess" mode bits. ani xsm1 ;mask in bits to give caller. mov c,a mvi a,(not xsm1) and 0ffh ana m ;clear callers bits prior to setting again ora c ;complete callers mode bytes mov m,a pop b ;restore XLAT pop d ;restore DPB lxi h,strtbl-?serdp ; load address of string table XRA A ; and clear the accumulator RET ; as this is the successful return NXD1: INX H NXD2: INX H nxd3: inx h inx h inx h inx h inx h MOV A,M CPI 11111111B jrnz NXDPB ; loop if more entries in table POP H ; restore mode byte pointer lxi h,strtbl-?serdp ; load address of string table xra a ! dcr a ; return [NZ] if DPs not found. RET ; as this is the error return ; ; (10-256 byte) ; Format string name table - all formats must have a entry here ; strtbl db 'KAYPRO ' ;bit 0 - must be 8 characters wide db 'UNUSED ' ;bit 1 db 'MMS ' ; 2 db 'Z37 ' ; 3 db 'Z37X ' ; 4 db 'Z100 ' ; 5 db 'EPSON ' ; 6 db 'ASSOC ' ; 7 db 'FMT8 ' ; 8 db 'FMT9 ' ; 9 db 'FMT10 ' ; 10 db 'FMT11 ' ; 11 db 'FMT12 ' ; 12 db 'FMT13 ' ; 13 db 'FMT14 ' ; 14 ; ;---------------------------------------------------------------------- ; ; ;---------------------------------------------------------------------- ; ; SRM0: equ 10000001B ; SRM1: equ 01110000B ;SEARCH MODES MASKS XSM0: equ 00000000B ; XSM1: equ 10001111B ;EXCESS MODES MASKS PTRTBL: DB 00000000b,00000100B,00000000B,00010001B ; 5" mms,dd,ss,st dw mms0,0 DB 00000000b,00000100B,00000000B,01010001B ; 5" mms,dd,ds,st dw mms1,0 DB 00000000b,00000100B,00000000B,00110001B ; 5" mms,dd,ss,dt dw mms2,0 DB 00000000b,00000100B,00000000B,01110001B ; 5" mms,dd,ds,dt dw mms3,0 DB 00000000b,00001000B,00000000B,10000001B ; z37,sd,ss,st dw z370,0 DB 00000000b,00001000B,00000000B,10010001B ; z37,dd,ss,st dw z371,0 DB 00000000b,00010000B,00000000B,10010001B ; z37x,dd,ss,st dw z372,0 DB 00000000b,00001000B,00000000B,11000011B ; z37,sd,ds,st dw z373,0 DB 00000000b,00001000B,00000000B,11010011B ; z37,dd,ds,st dw z374,0 DB 00000000b,00010000B,00000000B,11010011B ; z37x,dd,ds,st dw z375,0 DB 00000000b,00001000B,00000000B,10100001B ; z37,sd,ss,dt dw z376,0 DB 00000000b,00001000B,00000000B,10110001B ; z37,dd,ss,dt dw z377,0 DB 00000000b,00010000B,00000000B,10110001B ; z37x,dd,ss,dt dw z378,0 DB 00000000b,00001000B,00000000B,11100011B ; z37,sd,ds,dt dw z379,0 DB 00000000b,00001000B,00000000B,11110011B ; z37,dd,ds,dt dw z37a,0 DB 00000000b,00010000B,00000000B,11110011B ; z37x,dd,ds,dt dw z37b,0 DB 00000000b,00100000B,00000000B,10010001B ; z100,dd,ss,st dw z100a,0 DB 00000000b,00100000B,00000000B,11010011B ; z100,dd,ds,st dw z100b,0 DB 00000000b,00100000B,00000000B,10110001B ; z100,dd,ss,dt dw z100c,0 DB 00000000b,00100000B,00000000B,11110011B ; z100,dd,ds,dt dw z100d,0 DB 00000000b,01000000B,00000000B,01010101B ; 5" EPSON,dd,ds,st dw epson,0 DB 00000000b,10000000B,00000000B,01010111B ; 5" GNAT,dd,ds,st dw gnat,0 DB 00000000b,00000001B,00000000B,00011000B ; 5" KAYPRO dd,ss,st dw kaypro0,0 DB 00000000b,00000001B,00000000B,01011000B ; 5" KAYPRO dd,ds,st dw kaypro1,0 DB 00000000b,00000001b,00000001b,01110011b ; 5" KAYPRO qd,ds,qt dw kaypro3,kpqtx DB 11111111B ;FLAG FOR END OF TABLE $*MACRO dseg ;DPBs and SECTRN tables in banked mem MMS0: calcdpb 36,16, 83, 96,3,512,0 MMS1: calcdpb 36,16,173, 96,3,512,0 MMS2: calcdpb 36,32, 86,128,3,512,0 MMS3: calcdpb 36,32,176,128,3,512,0 Z370: calcdpb 20, 8, 92, 64,3,256,0 Z371: calcdpb 32, 8,152,128,2,256,0 Z372: calcdpb 40, 8,186,128,2,1024,0 Z373: calcdpb 20, 8,188,128,3,256,0 Z374: calcdpb 32,16,156,256,2,256,0,@ Z375: calcdpb 40,16,195,256,2,1024,0,@ Z376: calcdpb 20, 8,192, 64,3,256,0 Z377: calcdpb 32,16,156,128,2,256,0 Z378: calcdpb 40,16,195,128,2,1024,0 Z379: calcdpb 20,16,196,128,3,256,0 Z37A: calcdpb 32,16,316,256,2,256,0 Z37B: calcdpb 40,16,395,256,2,1024,0 Z100a: calcdpb 32, 8,152,128,2,512,0 ;; 5" disks Z100b: calcdpb 32,16,156,256,2,512,0,@ Z100c: calcdpb 32,16,156,128,2,512,0 Z100d: calcdpb 32,16,316,256,2,512,0 epson: calcdpb 80,16,190,128,2,512,0 gnat: calcdpb 80,16,169,128,1,512,0,@ kaypro0: calcdpb 40,8,195,64,1,512,64 kaypro1: calcdpb 40,16,197,64,1,512,64 ;drop support for expanded-directory format - risky anyway. ;kaypro2: calcdpb 40,16,197,128,1,512,0 kaypro3: calcdpb 68,16,1351,1024,2,512,0 ; ; NOTE: skew tables are for physical sector numbers. ; kpqtx: db 1,6,11,16,4,9,14,2,7,12,17,5,10,15,3,8,13 end Tracks per Inch - 96',CR,LF,'$' T192MSG: DB ' Tracks per Inch - 192',CR,LF,'$' HALFTK: DB ' Tracks per Inch - 48 tpi media i sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Exampvers equ '3 ' ; March 12, 2017 16:32 drm "DRIVES.ASM" maclib Z80 ; Program to display logical/physical drive relationships for CP/M 3 ; also to work on MP/M-II on 77500 cpm equ 0 conout equ 2 msgout equ 9 retver equ 12 cr equ 13 lf equ 10 org 0100h base: jmp start bdos equ base-100h+5 signon: db cr,lf,'DRIVES v3.10' dw vers db cr,lf,'$' str0: db ': = ($' verr: db cr,lf,'Must have CP/M 3$' vererr: lxi d,verr mvi c,msgout call bdos jmp xit thread: dw 0 lptbl: dw 0 lpsetup: db 0,0,0 ;physical drive number, string address for drive A: db 0,0,0 ; drive B: db 0,0,0 ; C: db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 db 0,0,0 ; P: start: sspd savstk lxi sp,stack lxi d,signon mvi c,msgout call bdos mvi c,retver call bdos mov a,l sui 30h cpi 16 jnc vererr mov a,h lhld cpm+1 cpi 1 ;MP/M? jrnz st0 inx h mov e,m inx h mov d,m xchg st0: mvi l,100 ;lptbl mov e,m inx h mov d,m inx h mov c,m ;thread inx h mov b,m sbcd thread sded lptbl lhld lptbl lxi d,lpsetup mvi b,16 su0: mov a,m stax d inx h inx d inx d inx d djnz su0 lhld thread su2: mov e,m inx h mov d,m inx h mov a,d ora e jz su1 push d mov a,m ;first device cpi 200 jnc su3 ;disk I/O only, no character I/O. mov b,a inx h mov c,m ;number of devices lxi d,12+1 ; dad d ;point to string address mov e,m inx h mov d,m lxi h,lpsetup xchg push h mvi l,16 su6: ldax d ;physical drive number of logical drive. inx d sub b cmp c ;in range? jnc su4 ; xthl xchg mov m,e ;put string address in setup table inx h mov m,d inx h xchg xthl su5: dcr l jnz su6 pop h ;discard jmp su3 su4: inx d inx d jmp su5 su3: pop h jmp su2 su1: lxi h,lpsetup ;now print out list of drives mvi b,16 su9: mov a,m cpi 255 ;drive not available jz nxtone call crlf mvi a,16 sub b ;make 0,1,2,3,4... for A,B,C,... adi 'A' call chrout lxi d,str0 call strout mov a,m ;physical drive number call decout mvi a,')' call chrout mvi a,3+1+1 sub c ; mov c,a dcr c jz su7 su8: mvi a,' ' call chrout dcr c jnz su8 su7: inx h mov e,m inx h mov d,m inx h mov a,e ora d jrz su10 call strout su10: djnz su9 call crlf xit: lspd savstk ret nxtone: inx h inx h inx h jmp su10 ds 32 stack: ds 0 savstk: ds 2 crlf: mvi a,cr call chrout mvi a,lf chrout: push b push d push h mov e,a mvi c,conout call bdos pop h pop d pop b ret strout: push b push h mvi c,msgout call bdos pop h pop b ret decout: push b push h lxi b,0 ;for leading zero deletion, output count mvi e,100 call divout mvi e,10 call divout call dv1 ;always display one's digit. pop h mov a,c pop b mov c,a ;number of characters outputed in C ret divout: mvi d,0 dv0: inr d sub e jnc dv0 add e dcr d mov l,a ;remainder in L, temp. bit 0,b ;leading zero? jnz dv1 mov a,d ora a jz dv2 dv1: setb 0,b inr c adi '0' call chrout dv2: mov a,l ret end leading zero? jnz dv1 mov a,d ora a jz dv2 dv1: setb 0,b inr c adi '0' call ch inx h mov d,m inx h mov a,d ora e jz su1 push d mov a,m ;first device cpi 200 jnc su3 ;disk I/O only, no character I/O. mov b,a inx h mov c,m ;number of devices lxi d,12+1 ; dad d ;point to string address mov e,m inx h 2033 = VERS EQU '3 ' ; MARCH 12, 2017 16:32 DRM "DRIVES.ASM" MACLIB Z80 ; PROGRAM TO DISPLAY LOGICAL/PHYSICAL DRIVE RELATIONSHIPS FOR CP/M 3 ; ALSO TO WORK ON MP/M-II ON 77500 0000 = CPM EQU 0 0002 = CONOUT EQU 2 0009 = MSGOUT EQU 9 000C = RETVER EQU 12 000D = CR EQU 13 000A = LF EQU 10 0100 ORG 0100H 0100 C36E01 BASE: JMP START 0005 = BDOS EQU BASE-100H+5 0103 0D0A445249SIGNON: DB CR,LF,'DRIVES v3.10' 0111 3320 DW VERS 0113 0D0A24 DB CR,LF,'$' 0116 3A203D2028STR0: DB ': = ($' 011C 0D0A4D7573VERR: DB CR,LF,'Must have CP/M 3$' 012F 111C01 VERERR: LXI D,VERR 0132 0E09 MVI C,MSGOUT 0134 CD0500 CALL BDOS 0137 C34302 JMP XIT 013A 0000 THREAD: DW 0 013C 0000 LPTBL: DW 0 LPSETUP: 013E 000000 DB 0,0,0 ;PHYSICAL DRIVE NUMBER, STRING ADDRESS FOR DRIVE A: 0141 000000 DB 0,0,0 ; DRIVE B: 0144 000000 DB 0,0,0 ; C: 0147 000000 DB 0,0,0 014A 000000 DB 0,0,0 014D 000000 DB 0,0,0 0150 000000 DB 0,0,0 0153 000000 DB 0,0,0 0156 000000 DB 0,0,0 0159 000000 DB 0,0,0 015C 000000 DB 0,0,0 015F 000000 DB 0,0,0 0162 000000 DB 0,0,0 0165 000000 DB 0,0,0 0168 000000 DB 0,0,0 016B 000000 DB 0,0,0 ; P: START: SSPD SAVSTK 016E+ED73 DB 0EDH,73H 0170+6E02 DW SAVSTK 0172 316E02 LXI SP,STACK 0175 110301 LXI D,SIGNON 0178 0E09 MVI C,MSGOUT 017A CD0500 CALL BDOS 017D 0E0C MVI C,RETVER 017F CD0500 CALL BDOS 0182 7D MOV A,L 0183 D630 SUI 30H 0185 FE10 CPI 16 0187 D22F01 JNC VERERR 018A 7C MOV A,H 018B 2A0100 LHLD CPM+1 018E FE01 CPI 1 ;MP/M? JRNZ ST0 0190+2005 DB 20H,ST0-$-1 0192 23 INX H 0193 5E MOV E,M 0194 23 INX H 0195 56 MOV D,M 0196 EB XCHG 0197 2E64 ST0: MVI L,100 ;LPTBL 0199 5E MOV E,M 019A 23 INX H 019B 56 MOV D,M 019C 23 INX H 019D 4E MOV C,M ;THREAD 019E 23 INX H 019F 46 MOV B,M SBCD THREAD 01A0+ED43 DB 0EDH,43H 01A2+3A01 DW THREAD SDED LPTBL 01A4+ED53 DB 0EDH,53H 01A6+3C01 DW LPTBL 01A8 2A3C01 LHLD LPTBL 01AB 113E01 LXI D,LPSETUP 01AE 0610 MVI B,16 01B0 7E SU0: MOV A,M 01B1 12 STAX D 01B2 23 INX H 01B3 13 INX D 01B4 13 INX D 01B5 13 INX D DJNZ SU0 01B6+10F8 DB 10H,SU0-$-1 01B8 2A3A01 LHLD THREAD 01BB 5E SU2: MOV E,M 01BC 23 INX H 01BD 56 MOV D,M 01BE 23 INX H 01BF 7A MOV A,D 01C0 B3 ORA E 01C1 CAFC01 JZ SU1 01C4 D5 PUSH D 01C5 7E MOV A,M ;FIRST DEVICE 01C6 FEC8 CPI 200 01C8 D2F801 JNC SU3 ;DISK I/O ONLY, NO CHARACTER I/O. 01CB 47 MOV B,A 01CC 23 INX H 01CD 4E MOV C,M ;NUMBER OF DEVICES 01CE 110D00 LXI D,12+1 ; 01D1 19 DAD D ;POINT TO STRING ADDRESS 01D2 5E MOV E,M 01D3 23 INX H 01D4 56 MOV D,M 01D5 213E01 LXI H,LPSETUP 01D8 EB XCHG 01D9 E5 PUSH H 01DA 2E10 MVI L,16 01DC 1A SU6: LDAX D ;PHYSICAL DRIVE NUMBER OF LOGICAL DRIVE. 01DD 13 INX D 01DE 90 SUB B 01DF B9 CMP C ;IN RANGE? 01E0 D2F301 JNC SU4 ; 01E3 E3 XTHL 01E4 EB XCHG 01E5 73 MOV M,E ;PUT STRING ADDRESS IN SETUP TABLE 01E6 23 INX H 01E7 72 MOV M,D 01E8 23 INX H 01E9 EB XCHG 01EA E3 XTHL 01EB 2D SU5: DCR L 01EC C2DC01 JNZ SU6 01EF E1 POP H ;DISCARD 01F0 C3F801 JMP SU3 01F3 13 SU4: INX D 01F4 13 INX D 01F5 C3EB01 JMP SU5 01F8 E1 SU3: POP H 01F9 C3BB01 JMP SU2 01FC 213E01 SU1: LXI H,LPSETUP ;NOW PRINT OUT LIST OF DRIVES 01FF 0610 MVI B,16 0201 7E SU9: MOV A,M 0202 FEFF CPI 255 ;DRIVE NOT AVAILABLE 0204 CA4802 JZ NXTONE 0207 CD7002 CALL CRLF 020A 3E10 MVI A,16 020C 90 SUB B ;MAKE 0,1,2,3,4... FOR A,B,C,... 020D C641 ADI 'A' 020F CD7702 CALL CHROUT 0212 111601 LXI D,STR0 0215 CD8402 CALL STROUT 0218 7E MOV A,M ;PHYSICAL DRIVE NUMBER 0219 CD8E02 CALL DECOUT 021C 3E29 MVI A,')' 021E CD7702 CALL CHROUT 0221 3E05 MVI A,3+1+1 0223 91 SUB C ; 0224 4F MOV C,A 0225 0D DCR C 0226 CA3202 JZ SU7 0229 3E20 SU8: MVI A,' ' 022B CD7702 CALL CHROUT 022E 0D DCR C 022F C22902 JNZ SU8 0232 23 SU7: INX H 0233 5E MOV E,M 0234 23 INX H 0235 56 MOV D,M 0236 23 INX H 0237 7B MOV A,E 0238 B2 ORA D JRZ SU10 0239+2803 DB 28H,SU10-$-1 023B CD8402 CALL STROUT SU10: DJNZ SU9 023E+10C1 DB 10H,SU9-$-1 0240 CD7002 CALL CRLF XIT: LSPD SAVSTK 0243+ED7B DB 0EDH,07BH 0245+6E02 DW SAVSTK 0247 C9 RET 0248 23 NXTONE: INX H 0249 23 INX H 024A 23 INX H 024B C33E02 JMP SU10 024E DS 32 026E STACK: DS 0 026E SAVSTK: DS 2 0270 3E0D CRLF: MVI A,CR 0272 CD7702 CALL CHROUT 0275 3E0A MVI A,LF 0277 C5 CHROUT: PUSH B 0278 D5 PUSH D 0279 E5 PUSH H 027A 5F MOV E,A 027B 0E02 MVI C,CONOUT 027D CD0500 CALL BDOS 0280 E1 POP H 0281 D1 POP D 0282 C1 POP B 0283 C9 RET 0284 C5 STROUT: PUSH B 0285 E5 PUSH H 0286 0E09 MVI C,MSGOUT 0288 CD0500 CALL BDOS 028B E1 POP H 028C C1 POP B 028D C9 RET 028E C5 DECOUT: PUSH B 028F E5 PUSH H 0290 010000 LXI B,0 ;FOR LEADING ZERO DELETION, OUTPUT COUNT 0293 1E64 MVI E,100 0295 CDA502 CALL DIVOUT 0298 1E0A MVI E,10 029A CDA502 CALL DIVOUT 029D CDB902 CALL DV1 ;ALWAYS DISPLAY ONE'S DIGIT. 02A0 E1 POP H 02A1 79 MOV A,C 02A2 C1 POP B 02A3 4F MOV C,A ;NUMBER OF CHARACTERS OUTPUTED IN C 02A4 C9 RET 02A5 1600 DIVOUT: MVI D,0 02A7 14 DV0: INR D 02A8 93 SUB E 02A9 D2A702 JNC DV0 02AC 83 ADD E 02AD 15 DCR D 02AE 6F MOV L,A ;REMAINDER IN L, TEMP. BIT 0,B ;LEADING ZERO? 02AF+CB40 DB 0CBH,0*8+B+40H 02B1 C2B902 JNZ DV1 02B4 7A MOV A,D 02B5 B7 ORA A 02B6 CAC102 JZ DV2 DV1: SETB 0,B 02B9+CBC0 DB 0CBH,0*8+B+0C0H 02BB 0C INR C 02BC C630 ADI '0' 02BE CD7702 CALL CHROUT 02C1 7D DV2: MOV A,L 02C2 C9 RET 02C3 END :10010000C36E010D0A4452495645532076332E31B1 :100110003033200D0A243A203D2028240D0A4D7545 :10012000737420686176652043502F4D203324116D :100130001C010E09CD0500C34302000000000000B1 :1001400000000000000000000000000000000000AF :10015000000000000000000000000000000000009F :100160000000000000000000000000000000ED732F :100170006E02316E021103010E09CD05000E0CCD89 :1001800005007DD630FE10D22F017C2A0100FE0131 :100190002005235E2356EB2E645E2356234E234612 :1001A000ED433A01ED533C012A3C01113E0106109A :1001B0007E122313131310F82A3A015E2356237A72 :1001C000B3CAFC01D57EFEC8D2F80147234E110DFB :1001D00000195E2356213E01EBE52E101A1390B94B :1001E000D2F301E3EB73237223EBE32DC2DC01E1D5 :1001F000C3F8011313C3EB01E1C3BB01213E0106A8 :10020000107EFEFFCA4802CD70023E1090C641CD5E :100210007702111601CD84027ECD8E023E29CD7764 :10022000023E05914F0DCA32023E20CD77020DC22B :100230002902235E2356237BB22803CD840210C1FA :0E024000CD7002ED7B6E02C9232323C33E0264 :100270003E0DCD77023E0AC5D5E55F0E02CD0500E5 :10028000E1D1C1C9C5E50E09CD0500E1C1C9C5E58A :100290000100001E64CDA5021E0ACDA502CDB90243 :1002A000E179C14FC916001493D2A70283156FCB11 :1002B00040C2B9027AB7CAC102CBC00CC630CD77F2 :0302C000027DC9F3 :0000000000 0100 BASE 0000 BC 0005 BDOS 0277 CHROUT 0002 CONOUT 0000 CPM 000D CR 0270 CRLF 0002 DE 028E DECOUT 02A5 DIVOUT 02A7 DV0 02B9 DV1 02C1 DV2 0004 HL 0004 IX 0004 IY 000A LF 013E LPSETUP 013C LPTBL 0009 MSGOUT 0248 NXTONE 000C RETVER 026E SAVSTK 0103 SIGNON 0197 ST0 026E STACK 016E START 0116 STR0 0284 STROUT 01B0 SU0 01FC SU1 023E SU10 01BB SU2 01F8 SU3 01F3 SU4 01EB SU5 01DC SU6 0232 SU7 0229 SU8 0201 SU9 013A THREAD 012F VERERR 011C VERR 2033 VERS 0243 XIT les A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on-n DRIVES v3.103 $: = ($ Must have CP/M 3$  C sn1n    }0/|*  #^#V.d^#V#N#FC:S<*<>~#*:^#V#z~G#N ^#V!>.s#r#-û!>~Hp>Aẅ́~͎>)w>O 2> w )#^#V#{(̈́p{n###> > w> _    dͥ ͥ͹yO ҧo@¹z 0w} vers equ '0d' ; March 12, 2017 16:02 drm "LDCPM3.ASM" maclib Z80 cpm equ 0 bdos equ 5 tbuff equ 80h msgout equ 9 reset equ 13 openf equ 15 read equ 20 sdma equ 26 lf equ 10 cr equ 13 org 100h LOADER: lxi sp,stack ; ***** this should be part of COLD BOOT in CPM3LDRK ; lxi h,0fd74h ; lxi d,00040h ; lxi b,16 ; ldir ; ***** ; ROM 81-292 uses 0fd74h ; U-ROM 81-478 uses 0fe9ah ; ROM 81-302 uses 0fd5ch ; Identify ROM by... ; we can't map ROM in, we are in low memory. ; can't call ROM, either. ; U-ROM places '2.01' in 0fff8h... ; 81-292 places copyout in 0fde5h (DB 14 CB BF D3 14 ED B0 DB 14 CB FF D3 14 C9) ; 81-302 places copyout in 0f919h (DB 14 CB BF D3 14 ED B0 DB 14 CB FF D3 14 C9) call chkuni jz rom20 lxi h,0f919h call chksig jz rom19 lxi h,0fde5h call chksig jz romXX lxi d,badrom mvi c,msgout call bdos jmp cpm gotrom: lxi d,rommsg mvi c,msgout call bdos mvi c,reset call bdos MVI C,openf LXI D,cpm3$sys CALL bdos CPI 255 LXI D,nofile JZ errmsg LXI D,tbuff CALL dmaset CALL readfile LXI H,tbuff LXI D,topres lxi b,6 ldir CALL readfile MVI C,msgout LXI D,tbuff CALL bdos LDA reslen MOV d,A ; LDA topres mvi e,0 lxi h,buffer dad d shld resend xchg call loadf LDA bnklen ORA A JZ nobnk MOV d,A ; LDA topbnk mvi e,0 lhld resend dad d shld bnkend xchg CALL loadf nobnk: di ; ***** this should be part of COLD BOOT in CPM3LDRK lhld romcrt lxi d,00040h lxi b,16 ldir lda romid stax d ; ROM identifer char at 0050h ; ***** lda reslen mov b,a ;B=reslen mvi c,0 lhld resend dcx h lda topres mov d,a mvi e,0 dcx d lddr lda bnklen ora a jz nobnk0 mov b,a mvi c,0 lhld bnkend dcx h lda topbnk mov d,a mvi e,0 dcx d lddr nobnk0: ; Before running OS, patch logical-physical drive table. call setlpd ; lhld cstart pchl loadf: ;ORA A ;DE = top address (max+1) ;MOV D,A ;MVI E,0 MOV A,H RAL MOV H,A read0: XCHG LXI B,-128 DAD B XCHG PUSH D PUSH H CALL dmaset CALL readfile POP H POP D DCR H JNZ read0 RET dmaset: MVI C,sdma CALL bdos RET readfile: MVI C,read LXI D,cpm3$sys CALL bdos ORA A LXI D,rderr RZ errmsg: MVI C,msgout CALL bdos jmp cpm chkuni: lxi h,0fff8h mov a,m inx h cpi '2' rnz mov a,m inx h cpi '.' rnz mov a,m inx h cpi '0' rnz mov a,m inx h cpi '1' ret ; HL = prospective location chksig: lxi d,signature mvi b,siglen chk0: ldax d cmp m rnz inx h inx d djnz chk0 xra a ret rom20: lxi h,0fe9ah shld romcrt mvi a,'U' sta romid lda 0fff7h cpi 0ffh ; floppy-only lxi h,lpdfpy ; floppy only jrz romZZ$1 lda 0fff4h ; drive A ani 00001100b ; common code romZZ$0: lxi h,lpdwin0 ; win, floppy jrz romZZ$1 lxi h,lpdwin1 ; floppy, win romZZ$1: shld lptbl jmp gotrom rom19: ; 81-302c, 81-277, 81-188, version series 1.9 lxi h,0fd5ch shld romcrt mvi a,'3' sta romid ; get floppy/win determinination ; 0f700h: cur dsk type, 0=win, (ff) floppy ; 0f701h: drive A type... ; 0f702h: cur SPT? lda 0f701h ora a jr romZZ$0 romXX: ; 81-292a, no visible version - floppy-only lxi h,0fd74h shld romcrt mvi a,'2' sta romid lxi h,lpdfpy ; floppy only shld lptbl jmp gotrom setlpd: ; locate lptbl... update it lhld cstart ; assume this is BIOS base lxi d,100 ; offset to logical-physical drive table dad d mov e,m inx h mov d,m lhld lptbl mov a,h ora l rz lxi b,3 ; TODO: allow more drives? ldir ret cpm3$sys: DB 0,'CPM3 SYS',0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0 topres: db 0 reslen: db 0 topbnk: db 0 bnklen: db 0 cstart: dw 0 resend: dw 0 bnkend: dw 0 ; This code is located in high RAM for certain ROM versions signature: in 014h res 7,a out 014h ldir in 014h setb 7,a out 014h ret siglen equ $-signature badrom: db 7,'Unknown ROM version!',cr,lf,'$' rommsg: db 'LDCPM3 vers 3.10' dw vers db 'Got ROM id ' romid: db '.',cr,lf,'$' romcrt: dw 0 lptbl: dw 0 lpdwin0: db 50,51,33 lpdwin1: db 33,50,51 lpdfpy: db 33,34,35 nofile: DB cr,lf,'error: File not found: CPM3.SYS',cr,lf,'$' rderr: DB cr,lf,'error: Read failure: CPM3.SYS',cr,lf,'$' ds 64 stack: ds 0 buffer: ds 0 end M3.SYS',cr,lf,'$' rderr: DB cr,lf,'error: '.' rnz mov a,m inx h cpi '0' rnz mov a,m inx h cpi '1' ret ; HL = prospective location chksig: lxi d,sVERS EQU '6 ' ; March 17, 2017 18:58 drm "MODE.ASM" ; for both CP/M plus and MP/M-II (77500) ; ST = drive and media Single Track ; DT = drive and media Double Track ; QT = drive and media Quad Track ; DTS = drive Double Track, media Single Track ; QTS = drive Quad Track, media Single Track ; QTD = drive Quad Track, media Double Track MACLIB Z80 $-MACRO CPM EQU 0 ; JUMP TO BIOS CR EQU 0DH ; CARRIAGE RETURN LF EQU 0AH ; LINE FEED ESC EQU 1BH ; EXCAPE bell equ 7 ; bell search equ 90 lptbl equ 100 ; OFFSET TO lptbl TABLE vector from WBOOT thread equ 102 ; module thread starting vector ?serdp equ 104 stroff equ 12 ; string address offset from init rout of mod ; ; SYSTEM (BDOS) CALLS ; CONIN EQU 1 ; CONSOLE INPUT conout equ 2 ; console out CONIO EQU 6 ; DIRECT CONSOLE I/O TYPE EQU 9 ; CONSOLE STRING PRINT RDCON EQU 10 ; READ CONSOLE BUFFER GETCON EQU 11 ; GET CONSOLE STATUS getver equ 12 ; get CP/M version number DSKRES EQU 13 ; DISK RESET LOGIN EQU 24 ; RETURN LOGIN VECTOR CURDSK EQU 25 ; GET CURRENT DISK SETDMA EQU 26 ; SET DMA ADDRESS RESDRV EQU 37 ; RESET DRIVE FUNCTION org 0100h base: JMP START BDOS EQU base-100h+5 ; STANDARD CP/M ENTRY FCB EQU base-100h+5CH ; INPUT FILE CONTROL BLOCK DMA EQU base-100h+80H ; INPUT DMA ADDRESS TPA EQU base ; CP/M PROGRAM AREA sysadr: dw 0 SIGNON: DB cr,LF,'MODE v3.10' dw vers DB CR,LF,LF,'$' errver: db bell,'Requires CP/M 3.1 or MP/M',cr,lf,'$' nodper: db bell,'GETDP.REL not linked into system',cr,lf,'$' vererr: lspd oldsp lxi d,errver errout: mvi c,type jmp bdos nogetdp: lspd oldsp lxi d,nodper jr errout START: SSPD OLDSP ; save old stack pointer LXI SP,STACK ; for a fast reboot LXI D,SIGNON ; signon message MVI C,TYPE ; string output function CALL BDOS mvi c,getver call bdos mov a,l cpi 30h jc vererr ;can't run 2.F or earlier. mov a,h lhld cpm+1 cpi 1 ;MP/M - jnz st0 inx h mov e,m inx h mov d,m xchg st0: shld sysadr lxi line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are s b,?serdp-3 ; Check if GETDP is linked in dad b call hlihl lded sysadr xra a ; clear A and [cy] mov e,a dsbc d jz nogetdp CALL SPCHK ; scan command line for first JNZ HADARG ; non space character. LXI D,HELP ; help text MVI C,TYPE CALL BDOS JMP DONE ; this is all, let's leave HADARG: CALL INCMD ; evaluate the command line JNZ ENDERR ; bad command line if non-zero LDA NEWARG ; get the data flag ORA A ; zero if data was entered JNZ OUTMOD ; if none, output the mode data CALL GETMOD ; get the mode byte CPI 0FFH ; check for error JZ NODRV CPI 0FEH ; check for wrong release JZ WRONG MOV A,M ANI 80H ; CHECK MODE BYTE DISABLE BIT JNZ FIXED CALL UPMODE ; update the mode byte CALL RESET ; reset the drive OUTMOD: CALL GETMOD CPI 0FFH ; check for drive not available JZ NODRV CPI 0FEH ; check for wrong release JZ WRONG MOV A,M ANI 80H ; CHECK NODE BYTE DISABLE BIT JNZ FIXED CALL MPRINT ; and print the new mode values JMP DONE ; and we're done SPCHK: LXI H,DMA ; number of characters input MOV A,M ORA A RZ ; no characters available INX H SHLD CMDPTR MOV C,A MVI B,0 DAD B MVI M,0 ;terminate command tail with a null LHLD CMDPTR MORSP: CALL CHAR CPI ' ' ; and check for spaces JZ MORSP DCX H SHLD CMDPTR ORA A ;[ZR] if a null (end of string) RET ; zero if no arguments CHAR: MOV A,M ;returns [CY] if not end of string ORA A RZ ;END OF BUFFER INX H CPI 'a' RC CPI 'z'+1 CMC RC SUI 'a'-'A' STC RET ; PARSES input command line ; INCMD: MVI A,1 STA NEWARG ; initialize argument flag to none LHLD CMDPTR ; pointer to first non-blank character CALL CHAR ; get it JNC BADCMD CPI 'A' ; check range of A-P JC BADCMD CPI 'P'+1 JNC BADCMD STA NODRMS ; setup error messages etc. STA DSKLT STA DIFD STA WRGD SUI 'A' ; make a drive number (0-15) MOV B,A ; and save in B CALL CHAR ; get a character JNC BADCMD CPI ':' ; which must be a ':' JNZ BADCMD MOV A,B ; get drive STA NDRIVE ; save for later NXARG: CALL CHAR RNC CPI ' ' JZ NXARG DCX H NXOPT: push h ; get address of format strg tbl in de call serdp xchg pop h MVI C,0 ; c = format bit number counter CONFIG: mvi b,8 ; length of entry in format string table PUSH H mov a,c CPI 15 ; if c = 15 then end of table JZ NOTCNF ;NMEMONIC NOT FOUND ldax d FIG0: CMP M JNZ FIG1 INX H INX D dcr b jz fig5 LDAX D CPI ' ' JNZ FIG0 fig5: MOV A,M ORA A JZ FIG2 CPI ',' JZ FIG2 CPI ' ' JNZ FIG1 FIG2: POP D ;DISCARD OLD BUFFER POINTER LDA CNFIG ORA A ;IS THIS THE SECOND ENTRY OF THIS TYPE? JNZ BADCMD ;ERROR IF IT IS. MOV A,C ADI '0' STA CNFIG JMP MORE FIG1: INX D ;go to end of format string table djnz FIG1 FIG3: POP H ;restore parameter address INR C ; JMP CONFIG NOTCNF: POP H ;WE KNOW THERE MUST BE AT LEAST ONE CHARACTER CALL CHAR ; get a character for the loop CPI 'D' ; check for 'D' command JZ DPROC CPI 'S' JZ STEP ;STEPRATE OR "SINGLE XXX" CPI 'Q' JNZ BADCMD HPROC: MOV B,A CALL CHAR JNC BADCMD CPI 'T' JNZ BADCMD trk: mov a,b ani 0fh mov b,a MOV A,M ; peek next argument cpi 'S' jrz trk0 cpi 'D' jrz trk1 MOV A,B jr trk1 ; already validated... trk0: call char jnz badcmd ani 0fh rlc rlc rlc rlc ora b trk1: sta track jmp more SPROC: MVI A,'S' DPROC: MOV B,A ; save SINGLE or DOUBLE CALL CHAR ; get the character JNC BADCMD CPI 'T' JZ TRK CPI 'D' JZ DENS CPI 'S' JNZ BADCMD MOV A,B ; get the SIDE argument STA SIDE JMP MORE DENS: MOV A,B ; get the DENSITY argument STA DENSITY JMP MORE STEP: MOV A,M ; get next argument CPI '0' ; must be numeric JC BADCMD CPI '9'+1 JNC SPROC CALL CHAR SUI '0' ; make it numeric MOV B,A ; and save it MOV A,M ; it must be a number, a comma, or null ORA A JZ SOK CPI ',' JZ SOK CPI ' ' JZ SOK CPI '0' JC BADCMD CPI '9'+1 JNC BADCMD CALL CHAR SUI '0' ; numeric, make it binary MOV C,A ; and save it MOV A,B ; get first number ADD A ADD A ADD B ADD A ; TIMES 10 ADD C ; plus second number MOV B,A ; expected in B SOK: MOV A,B ; get step rate STA STEPRT ; and save it MORE: CALL CHAR ; get next character JNC FINISH CPI ',' ; continue if a comma JZ NXOPT0 CPI ' ' ; or a space JZ MORE DCX H JMP NXOPT NXOPT0: CALL CHAR JNC FINISH CPI ' ' JZ NXOPT0 DCX H JMP NXOPT FINISH: XRA A STA NEWARG RET BADCMD: MVI A,1 ORA A ; set the zero flag RET ; update the present mode value ; UPMODE: push h popix LDA CNFIG ; see if configuration was specified ORA A JZ BIT1 sui '0' ;make it binary 0,1,2... lxi h,00000000$00000001b inr a gc1: dcr a jrz gc0 dad h jr gc1 GC0: stx H,+0 stx L,+1 BIT1: LDA SIDE ; see if side was specified ORA A JZ BIT3 resx 6,+3 ; clear the side bit CMA ANI 1 ; mask the lsb RRC RRC ; to bit 6 orax +3 ; into the mode byte stx a,+3 ; and update the byte BIT3: LDA DENSITY ; see if density was specified ORA A JZ BIT4 resx 4,+3 ; clear density bit CMA ANI 1 RRC RRC rrc rrc ; to bit 4 orax +3 ; mask the bit stx a,+3 ; and save it in memory BIT4: LDA TRACK ORA A JZ BIT5 resx 5,+3 ; reset everything, then set as needed resx 1,+2 resx 0,+2 RESX 5,+2 ani 0fh cpi 'D' and 0fh ; 04 jrz sdt cpi 'S' and 0fh ; 03 jrz BIT5 ; cpi 'Q' and 0fh ; 01 ; jrz sqt ; QT - quad track setx 0,+2 ; media QT assumed setx 1,+2 ; drive QT SDT: setx 5,+3 ; media DT (or QT) assumed setx 5,+2 ; drive DT ; DT/QT might have lesser media... lda track rlc rlc rlc rlc ani 00fh jrz BIT5 ; media same, done resx 0,+2 ; at least we know can't be QT media cpi 'D' and 0fh ; 04 jrz BIT5 resx 5,+3 ; make ST media BIT5: LDA STEPRT ; get the requested step rate ORA A ; see if user specified one JZ BIT6 bitx 7,+2 ; size, 5.25 or 8 LXI H,STEPTB LXI D,4 ; table is 4 bytes long JZ FIVE DAD D ; [cy] jc psh1 inr c jr pshlp psh1 mov m,c ; set PSH byte inx h ; mode pointer to PSM dcr b mov m,b ; put in dpb JR PHYSEL7 PHYSEL6:MVI A,1 STA SELERR ; FLAG A SELECT ERROR PHYSEL7: call done ; setup motor turn-off lxi h,selop mvi m,false ; SELECT OPERATION IS OVER ret physel3: CALL SELECT JRC PHYSEL6 ; ERROR IF NOT READY CALL HOME ;RESTORE HEAD TO TRACK 0 JRC PHYSEL6 MVI B,01001000B ;STEP IN, NO UPDATE CALL TYPE$I CALL TYPE$I CALL TYPE$I CALL TYPE$I ;STEP IN FOUR TIMES call read$addr ; READ ADDRESS lda @dstat ANI 00011000B SHL 1 ;check for FDC error. JRNZ PHYSEL6 lhld cmode mov b,m inx h mov c,m in fdcsec ;track number, from read-addr CPI 4 JRZ phy4s2 ; drive matches media... CPI 2 JRZ phy4s3 ; media has half the tracks of drive CPI 1 JRNZ PHYSEL6 ; media has 1/4 tracks as drive... ; must be ST media in QT drive... setb 1,b ;make drive "QT" setb 5,b ;make drive "DT" also res 0,b ;make media non-QT res 5,c ;make disk "ST" and reconfigure phy4s0: ; update mode bytes, check for changes... mov a,c xra m mov m,c dcx h mov c,a mov a,b xra m mov m,b ora c ; NZ if either byte changed... jz PHYSEL4 mvi a,0ffh sta @rcnfg ;set "re-configure" flag so BIOS will get new DPB/XLAT PHYSEL4: CALL HOME JRC PHYSEL6 JR PHYSEL7 phy4s2: ; drive tpi matches media, but force media modes bit 5,b jrz phy4s20 setb 5,c jr phy4s21 phy4s20: res 5,c phy4s21: bit 1,b jrz phy4s22 setb 0,b jr phy4s0 phy4s22: res 0,b jr phy4s0 phy4s3: ; use drive settings if possible... ; NOTE: this case would not normally exist on a Kaypro. ; must be at least a DT drive, non-QT media, so force that setb 5,b ;make drive "DT" res 0,b ;make media non-QT bit 1,b ;test drive "QT" jrnz phy4s4 res 5,c ;make media "ST" in DT drive jr phy4s0 phy4s4: ; QT drive, so media must be DT... setb 5,c ;make media "DT" in QT drive jr phy4s0 setup$rw: MVI A,21 ; 21 RETRYS FOR A READ/WRITE OPERATION STA RETRYS lhld @cmode inx h inx h shld cmode ret read$fdc: call setup$rw READ: CALL ACCESS$R ; START DRIVE AND STEP TO PROPER TRACK JRC ERROR lxi d,10011111$10001000B ; status mask + read command JR TYPE$II error: xra a ; [NZ] to indicate error inr a done: push psw lda selop ora a jrnz retrn mvi a,false ;motor off false sta motor$off setmot: lxi d,motoff mvi c,15 ;15 seconds mvi b,dev0 ;I.D. call ?timot retrn: pop psw ret write$fdc: call setup$rw WRITE: LHLD CMODE ; CHECK FOR HALF TRACK R/O bit 5,m ;see if drive is DT. jrz ht0 inx h bit 5,m ;see if media is not DT. jrz ERROR ; R/O ERROR ht0: CALL ACCESS$R ; ACCESS DRIVE FOR WRITE JRC ERROR in fdcstat sta @dstat ; save DISK STATUS BYTE ani 01000000b ; WRITE PROTECT BIT jrnz ERROR ; WRITE PROTECT ERROR lxi d,11111111$10101000B ; status mask + write command TYPE$II: lhld cmode inx h mov a,m ani 1 ;sector offset lxi h,@sect ; GET SECTOR NUMBER add m ;others use sectors 1-n OUT fdcsec ; give to controller RETRY: PUSH d ; save registers CALL TYPE$II$COM ; execute disk transfer routine. STA @dstat ; save status of transfer XRA A ; CLEAR CARRY FOR DSBC lded @dma DSBC D ; HL NOW CONTAINS # OF BYTES TRANSFERRED LDA @dstat ; check for successful transfer ANI 11111111B ; WP is 0 for any read command. JRNZ IOERR ; RETRY IF ERROR LDA SELOP ; IS THIS A SELECT OPERATION ? ORA A jrnz POPRET ; THEN DON'T CHECK SECTOR SIZE LDA BLCODE ; CHECK IF CORRECT NUMBER OF BYTES TRANSFERRED CPI 3 JRNZ NOTED ; BLCODE=3 => 1024 BYTE SECTOR EXPECTED INR A ; INCREMENT BECAUSE (H) FOR 1024 IS 4 NOTED: CMP H ; COMPARE TO EXPECTED SIZE POPRET: POP d mvi a,0 ;signal "no error" to BDOS. jrz done ; RETURN IF CORRECT JR TRYAGN ; RETRY IF INCORRECT IOERR: POP B JM ERROR ; ERROR IF NO READY SIGNAL TRYAGN: LXI H,RETRYS ; decrement retry count DCR M JZ ERROR ; NO MORE RETRIES MOV A,M CPI 10 JNC RETRY ; LESS THAN TEN RETRYS LEFT => STEP HEAD LDA SELOP ORA A jnz RETRY ; DO NOT STEP HEAD IF SELECT OPERATION PUSH d ; SAVE REGISTERS CALL STEPIN ; STEP IN COMMAND CALL SEEK ; SEEK WILL REPOSITION HEAD POP d JMP RETRY ; TRY AGAIN rtbl: db 128 ;128 bytes dw rd1 db 0 ;256 bytes dw rd1 db 0 ;512 bytes dw rd2 db 0 ;1024 bytes dw rd4 type$II$com: ;command in E mov a,e ani 00100000b ; 1 if write rlc! rlc! rlc ; 0000000w ori 0a2h ;A2/A3 for INI/OUTI sta rd12+1 sta rd22+1 sta rd32+1 sta rd42+1 call setside sspd savSTK ; lxi sp,rwSTK ; lda blcode mov c,a add a ; *2 add c ; *3 lxi h,rtbl mov c,a mvi b,0 dad b mov b,m inx h mov c,m inx h mov h,m mov l,c push h jmp type$II$ext SELECT: mvi c,0 mvi b,dev0 call ?timot ;clear any pending "motor off" lda selmsk mov d,a cma mov b,a LDA @rdrv ; get the RELATIVE drive number MOV C,A ; relative drive number in (C) (rel. to driv0) lhld cmode INX H ; POINT TO MODE BYTE 2 inr a ; 1,2,3,4 cma ; 111111xx ana d ; 2,1,0,3 but avoid win reset bit bit 4,m ;single density ? jrnz se1 ori 00100000b ;select single density data rate. se1: dcx h ; point to mode byte 1 bit 1,m ; QT drive? jrz se2 bit 0,m ; QT media? jrnz se3 ; motor "off" - low speed - for QT se2: ori 00010000b ;motor on, also (QT drive = high speed) se3: mov e,a di in sysctl ; ; TODO: if motor bit changes for QT drive, must de-select briefly ani 10001111b ; DDEN, clear MOTOR ana b ; strip select bit(s) ora e ; out sysctl ; ei MOV A,M ANI 00001100B ; setup steprate bits for seek-restore commands rrc rrc STA STEPRA ; RATE FOR SUBSEQUENT SEEK/RESTORE LXI H,LOGDSK ; save position (track) of current drive MOV E,M ; in 'trks' array addressed by contents of MOV M,C ; location 'logdsk'. MVI B,0 MOV D,B LXI H,TRKS DAD D IN fdctrk MOV M,A ; SAVE CURRENT TRACK # LXI H,TRKS ; identify position (track) of requested drive DAD B ; from 'trks' array addressed by new 'logdsk'. MOV A,M OUT fdctrk ; set track number mov a,c sub e ;same drive as last time? sui 1 ! sbb a ;.true. if same drive cma di lxi h,motor$off ;if diff. drive, must check ready. ora m ;if same but motor off, must check ready. mvi m,true ;this prevents the motor from being turned off sta mtflg ; test drive for ready. cma ! ora a ;[NC] jrnz fb3 ;[NZ] if motor still on. ; mvi a,11010000b out fdccomd in fdcstat mvi b,10 ;must be ready within 10 rev. fb1: call find$NE lxi d,IP$count fb2: in fdcstat ani 00000010b jrnz got$IP dcx d mov a,e ora d jrnz fb2 djnz fb1 stc fb3: ei ret IP$count equ 17250 ; 200mS +10%, timed to "fb2" loop got$IP: xra a ei ret find$NE: in fdcstat ani 00000010b mov c,a mvi h,4 ;wait even longer... (3.67 sec) fb00: lxi d,0 ;wait a long time for any edge fb01: in fdcstat ani 00000010b cmp c jrnz got$edge dcx d mov a,e ora d jrnz fb01 dcr h jrnz fb00 pop d ;discard address from "fb1" loop stc ei ret got$edge ora a rz mov c,a ;if not NE, go find another jr fb00 ACCESS$R: lhld @dph lxi d,12 dad d mvi a,15 ;PSH add m mov e,a inx h mvi a,0 adc m mov d,a ldax d sta blcode ;get physical sector size lhld cmode mov c,m ; mode byte 2 inx h mov a,m ; mode byte 3 cma ; get "NOT MDT... ana c ; ... AND DDT" ani 00100000b ; flag is in bit 5 bit 1,c ; drive QT? jrz accr0 ; no... bit 0,c ; must be 0? jrnz accr0 ; ori 01100000b ; set both just in case accr0: sta htflag ; half track flag CALL SELECT rc SEEK: LXI H,SEKERR ; initialize seek error counters MVI M,4 ; 4 ERRORS ON SEEK IS FATAL INX H MVI M,10 ; RESTORE once, then 9 errors are fatal call setside lda @trk mov c,a RETRS: MOV A,C ; get track number back ORA A ; FORCES "RESTORE" IF "seek to track 0" jz HOME ;RESTORE HEAD TO TRACK 0 lda htflag mov h,a ; get half-track flag in h IN fdctrk ;CURRENT HEAD POSITION, SUB C ;SEE HOW FAR WE WANT TO GO. RZ ;IF ZERO TRACKS TO STEP, WERE FINISHED MVI B,01111000B ;ASSUME STEP-OUT + UPDATE + HEADLOAD JRNC STOUT ;ASSUMPTION WAS CORRECT... MVI B,01011000B ;ELSE MUST BE STEP-IN NEG ;AND NUMBER OF TRACKS WOULD BE NEGATIVE STOUT: MOV L,A ;COUNTER FOR STEPING SEEK5: BIT 5,H ; CHECK FOR 48 TPI DISK IN 96 TPI DRIVE JRZ NOTHT RES 4,B ;SELECT NO-UPDATE CALL TYPE$I ;STEP HEAD ANI 00000100B SHL 1 ;DID THIS STEP PUT US AT TRACK 0 ? JRNZ TRK0ERR bit 6,h ; added bit for QT JRZ NOTQT CALL TYPE$I ;STEP HEAD ANI 00000100B SHL 1 ;DID THIS STEP PUT US AT TRACK 0 ? JRNZ TRK0ERR CALL TYPE$I ;STEP HEAD ANI 00000100B SHL 1 ;DID THIS STEP PUT US AT TRACK 0 ? JRNZ TRK0ERR NOTQT: SETB 4,B ;SELECT UPDATE TO TRACK-REG notht: CALL TYPE$I ;STEP HEAD ANI 00000100B SHL 1 ;DID THIS STEP PUT US AT TRACK 0 ? JRNZ TRK0ERR DCR L JRNZ SEEK5 IN fdcsec ;SAVE CURRENT SECTOR NUMBER MOV L,A CALL READ$ADDR ; GET ACTUAL TRACK UNDER HEAD (IN SECTOR REG) in fdcsec ;GET TRACK NUMBER FROM MEDIA MOV H,A MOV A,L OUT fdcsec ;RESTORE SECTOR NUMBER LDA @dstat ;GET TRUE ERROR STATUS OF READ-ADDRESS RLC RC ;DRIVE NOT READY ANI 00011000B SHL 1 ; CRC ERROR + REC-NOT-FOUND MOV A,H ; ACTUAL TRACK FROM READ-ADDRESS LXI H,SEKERR ;POINT TO ERROR COUNTERS JRNZ RESTR0 CMP C ; (C) MUST STILL BE VALID DEST. TRACK RZ ;NO ERRORS RTS00: DCR M ; SHOULD WE KEEP TRYING ? STC RZ ;NO, WE'VE TRYED TOO MUCH OUT fdctrk ; re-define head position accordingly JR RETRS ; RETRY SEEK TRK0ERR: XRA A LXI H,SEKERR JR RTS00 RESTR0: INX H ; RESTORE ERROR COUNT DCR M STC RZ ; If count 0, return with Carry set. MOV A,M CPI 9 JRNC RESTR1 ; RESTORE ONLY FIRST TIME CALL STEPIN ; OTHERWISE STEP HEAD IN 1 TRACK JR RETRS RESTR1: ; RESTORE HEAD TO TRACK 0 MVI A,00000011B STA STEPRA ; RETRY WITH MAXIMUM STEP RATE CALL HOME jmp RETRS ; RETRY SEEK STEPIN: lda htflag mov c,a ora a ; CHECK HALF TRACK modes MVI B,01001000B ; STEP IN WITHOUT UPDATE CNZ TYPE$I ; STEP A SECOND TIME (W/O UPDATE) FOR HALF-TRK bit 6,c ; QT CNZ TYPE$I ; STEP A THIRD TIME (W/O UPDATE) FOR QUARTER-TRK bit 6,c ; QT CNZ TYPE$I ; STEP A FOURTH TIME (W/O UPDATE) FOR QUARTER-TRK MVI B,01011000B ; STEP IN AND UPDATE TRACK REGISTER JR TYPE$I HOME: ;POSITION HEAD AT TRACK ZERO... mvi a,11010000b ;force TYPE$I status out fdccomd in fdcstat ANI 00000100B ;TEST TRACK ZERO SENSOR, JRNZ @TRK0 ;SKIP ROUTINE IF WE'RE ALREADY AT TRACK 0. IN fdctrk ;DOES THE SYSTEM THINK WE'RE AT TRACK 0 ?? ORA A JRNZ HOME1 ;IF IT DOESN'T, ITS PROBEBLY ALRIGHT TO GIVE "RESTORE" MVI L,6 ;(6 TRKS) ;ELSE WE COULD BE IN "NEGATIVE TRACKS" SO... MVI B,01001000B ;WE MUST STEP-IN A FEW TRACKS, LOOKING FOR THE HOME0: CALL TYPE$I ;TRACK ZERO SIGNAL. ANI 00000100B SHL 1 ;"SHL 1" BECAUSE TYPE$I DOES AN "RLC" JRNZ @TRK0 DCR L JRNZ HOME0 HOME1: MVI B,00001000B ;RESTORE COMMAND, WITH HEADLOAD CALL TYPE$I XRI 00000100B SHL 1 ;TEST TRACK-0 SIGNeparated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file,AL RAR RAR RAR RAR ;[CY] = 1 IF NOT AT TRACK 0 @TRK0: MVI A,0 OUT fdctrk ;MAKE SURE EVERYONE KNOWS WERE AT TRACK 0 RET ; READ$ADDR: mvi a,11000100B ; READ-ADDRESS COMMAND WITH SETTLE DELAY jr PUT$I TYPE$I: LDA STEPRA ; STEP-RATE BITS ORA B ; MERGE COMMAND PUT$I: OUT fdccomd ; SEND command TO CONTROLLER WB: IN fdcstat ; WAIT FOR BUSY SIGNAL RAR ; TO COME UP JRNC WB WNB: IN fdcstat ; poll controller for function-complete RAR ; Busy? JRC WNB ; wait until not busy. RAL STA @dstat ;SAVE TYPE II (III) STATUS FOR ERROR DETECTION. MVI A,11010000B ;TERMINATE COMMAND (RESET STATUS TO TYPE 1) OUT fdccomd IN fdcdata ; in fdcstat ; rlc ret setside: lda @side xri 00000001b ; active low output rlc ! rlc mov c,a di in sysctl ani 10111011b ; clear old side bit ora c ; add new side bit out sysctl ei ret STEPRA DB 0 ; STEP RATE CODE RETRYS DB 0 SEKERR DB 0,0 ; SEEK,RESTORE ERROR COUNTS CMODE DW 0 ; POINTER TO MODE BYTE LO d JMP RETRY ; TRY AGAIN rtbl: db 128 ;128 bytes dw rd1 db 0 ;256 bytes dw rd1 db 0 ;512 bytes dw rd2 db 0 ;1024 bytes dw rd4 type$II$com: ;command in E mov a,e ani 00100000b ; 1 if write rlc! rlc! rlc ; 0000000w ori 0a2h ;A2/A3 for INI/OUTI sta rd12+1 sta rd22+1 sta rd32+1 sta rd42+1 call setside sspd savSTK ; lxi sp,rwSTK ; lda blcode mov c,a add a ; *2 add c ; *3 lxi h,rtbl mov c,a mvi b,0 dad b mov b,m inx h mov c,m inx h mov h,m mov l,c push h jmp type$II$ext SELECT: mvi c,0 mvi b,dev0 call ?timot ;clear any pending "motor off" lda selmsk mov d,a cma mov b,a LDA @rdrv ; get the RELATIVE drive number MOV C,A ; relative drive number in (C) (rel. to driv0) lhld cmode INX H ; POINT TO MODE BYTE 2 inr a ; 1,2,3,4 cma ; 111111xx ana d ; 2,1,0,3 but avoid win reset bit bit 4,m ;single density ? jrnz se1 ori 00100000b ;select single density data rate. se1: dcx h ; point to mode byte 1 bit 1,m ; QT drive? jrz se2 bit 0,m ; QT media? jrnz se3 ; motor "off" - low speed - for QT se2: ori 00010000b ;motor on, also (QT drive = high speed) se3: mov e,a di in sysctl ; ; TODO: if motor bit changes for QT drive, must de-select briefly ani 10001111b ; DDEN, clear MOTOR ana b ; strip select bit(s) ora e ; out sysctl ; ei MOV A,M ANI 00001100B ; setup steprate bits for seek-restore commands rrc rrc STA STEPRA ; RATE FOR SUBSEQUENT SEEK/RESTORE LXI H,LOGDSK ; save position (track) of current drive MOV E,M ; in 'trks' array addressed by contents of MOV M,C ; location 'logdsk'. MVI B,0 MOV D,B LXI H,TRKS DAD D IN fdctrk MOV M,A ; SAVE CURRENT TRACK # LXI H,TRKS ; identify position (track) of requested drive DAD B ; from 'trks' array addressed by new 'logdsk'. MOV A,M OUT fdctrk ; set track number mov a,c sub e ;same drive as last time? sui 1 ! sbb a ;.true. if same drive cma di lxi h,motor$off ;if diff. drive, must check ready. ora m ;if same but motor off, must check ready. mvi m,true ;this prevents the motor from being turned off sta mtflg ; test drive for ready. cma ! ora a ;[NC] jrnz fb3 ;[NZ] if motor still on. ; mvi a,11010000b out fdccomd in fdcstat mvi b,10 ;must be ready within 10 rev. fb1: call find$NE lxi d,IP$count fb2: in fdcstat ani 00000010b jrnz got$IP dcx d mov a,e ora d jrnz fb2 djnz fb1 stc fb3: ei ret IP$count equ 17250 ; 200mS +10%, timed to "fb2" loop got$IP: xra a ei ret find$NE: in fdcstat ani 00000010b mov c,a mvi h,4 ;wait even longer... (3.67 sec) fb00: lxi d,0 ;wait a long time for any edge fb01: in fdcstat ani 00000010b cmp c jrnz got$edge dcx d mov a,e ora d jrnz fb01 dcr h jrnz fb00 pop d ;discard address from "fb1" loop stc ei ret got$edge ora a rz mov c,a ;if not NE, go find another jr fb00 ACCESS$R: lhld @dph lxi d,12 dad d mvi a,15 ;PSH add m mov e,a inx h mvi a,0 adc m mov d,a ldax d sta blcode ;get physical sector size lhld cmode mov c,m ; mode byte 2 inx h mov a,m ; mode byte 3 cma ; get "NOT MDT... ana c ; ... AND DDT" ani 00100000b ; flag is in bit 5 bit 1,c ; drive QT? jrz accr0 ; no... bit 0,c ; must be 0? jrnz accr0 ; ori 01100000b ; set both just in case accr0: sta htflag ; half track flag CALL SELECT rc SEEK: LXI H,SEKERR ; initialize seek error counters MVI M,4 ; 4 ERRORS ON SEEK IS FATAL INX H MVI M,10 ; RESTORE once, then 9 errors are fatal call setside lda @trk mov c,a RETRS: MOV A,C ; get track number back ORA A ; FORCES "RESTORE" IF "seek to track 0" jz HOME ;RESTORE HEAD TO TRACK 0 lda htflag mov h,a ; get half-track flag in h IN fdctrk ;CURRENT HEAD POSITION, SUB C ;SEE HOW FAR WE WANT TO GO. RZ ;IF ZERO TRACKS TO STEP, WERE FINISHED MVI B,01111000B ;ASSUME STEP-OUT + UPDATE + HEADLOAD JRNC STOUT ;ASSUMPTION WAS CORRECT... MVI B,01011000B ;ELSE MUST BE STEP-IN add offset FIVE: MVI B,0 ; initial step rate NXRT: CMP M ; compare request with table JC GSRT ; memory is greater, this is it INX H INR B DCR E JNZ NXRT MVI B,3 ; in case of overflow GSRT: MOV A,B ; step rate mask resx 2,+2 resx 3,+2 ; clear bits rlc rlc orax +2 ; and update mode value stx a,+2 BIT6: call serdp ORA A JNZ NOCHG ; error if non-zero (NO DPB FOUND) ; ; mode bytes updated by "?serdp" ; LXI H,MINFO ; NEW MODE BYTE POINTER PUSH H MVI A,4 ; number of bytes to check LBCD MODPTR ; OLD mode byte pointer LDED MSKPTR ; mode byte mask pointer ANOTHR: PUSH PSW ; save the counter LDAX B ; get old mode byte XRA M ; set bit for values changed XCHG ANA M ; check for changed bytes XCHG JNZ NOCHG ; error if non zero INX D INX B INX H ; point to the next byte POP PSW ; get counter DCR A ; and decrement it JNZ ANOTHR POP H ; restore pointer MVI B,4 LDED MODPTR ; actual mode byte pointer UPONE: MOV A,M ; if all's well, let's actually update STAX D ; the mode byte INX H INX D DJNZ UPONE RET ; and return serdp LXI D,MINFO ; MODE BYTE POINTER TO DE LHLD sysadr ; call serdp LXI B,?SERDP-3 DAD B ; POINTER TO SERDP CALL ADDRESS CALL HLIHL ; GET CALL ADDRESS push h CALL ICALL ; CALL "GETDP" TO FIND A DPB FOR THIS MODE pop d ; add start of serdp to hl to get start of dad d ; format string table ret ; output the mode data to the CRT ; A pointer to the mode data is passed in the HL ; MPRINT: LDA DRVNUM ; get physical drive number LXI B,0 ; tens counter in C and ones in B MORTEN: INR C SUI 10 JZ GOTNUM JP MORTEN DCR C ADI 10 MOV B,A GOTNUM: LXI H,3030H ; numeric offset to ASCII DAD B MOV A,L ; tens digit CPI '0' ; check for zero JNZ NOZE MVI A,' ' ; if so, replace with a space NOZE: MOV L,A SHLD DSKNM LXI D,TTLE1 LDA NEWARG ; was configuration changed ORA A ; zero if not changed JZ TYPNC LXI D,TTLE0 TYPNC: MVI C,TYPE CALL BDOS LXI D,DRSTR ; drive letter and number message MVI C,TYPE CALL BDOS LHLD MODPTR ; pointer to system mode byte PUSH H ; save the mode pointer BIT 7,M ; check validity JNZ DONE ; non-zero if hard disk inx h inx h BIT 7,M ; size, 0=5" and 1=8" LXI D,INCH5 JZ PRINCH LXI D,INCH8 PRINCH: MVI C,TYPE CALL BDOS LXI D,CTRMSG MVI C,TYPE CALL BDOS CALL GETTXT ; get text string pointer in DE MVI C,TYPE CALL BDOS call crlf POP H PUSH H ; get mode address again inx h inx h INX H ; point to byte 2 BIT 4,M JZ SD ; single density if zero LXI D,DDMSG ; double density drive message JMP DD SD: LXI D,SDMSG ; single density drive message DD: MVI C,TYPE CALL BDOS POP H PUSH H inx h inx h inx h BIT 6,M ; check the side bit JZ SS ; single sided if zero LXI D,DSMSG ; double sided drive message JMP DDS SS: LXI D,SSMSG ; single sided drive message DDS: MVI C,TYPE CALL BDOS POP H PUSH H ; get mode address again inx h inx h bit 0,m ; if QT media, assume drive same jrnz t192 bit 1,m ; not QT media, check drive jrnz t192k INX H bit 5,m ; bit set if 96 tpi media JNZ T96 ; media is ST, drive NOT QT dcx h bit 5,m ;check for drive "DT" inx h jz t48 LXI D,HALFTK ; half track message JMP HTRK T48: LXI D,T48MSG ; 48 tpi message JMP HTRK T96: LXI D,T96MSG ; 96 tpi message JMP HTRK t192k: inx h bit 5,m ; bit set if 96 tpi media (QT drive) JNZ T192h lxi d,HAF2TK ; 48tpi media in QT drive JMP HTRK t192h: lxi d,HAF3TK ; 96tpi media in QT drive JMP HTRK T192: LXI D,T192MSG ; 192 tpi message HTRK: MVI C,TYPE CALL BDOS POP H ; get pointer again PUSH H INX H ; point to second byte inx h MOV A,M ; and get it ANI 00001100b ; bits for step rate bit 7,m jrz sr00 setb 4,a sr00: LXI H,STRTBL ; step rate table rrc ; MOV E,A MVI D,0 ; 16 bit value for offset DAD D MOV E,M ; first byte of step rate INX H MOV D,M ; and the second XCHG SHLD STRATE ; save text in message LXI D,STRMSG ; step rate message MVI C,TYPE CALL BDOS LXI D,STRATE LDA STRATE CPI ' ' ; skip a character if a space JNZ NSPC INX D NSPC: MVI C,TYPE CALL BDOS lxi d,fmtstr mvi c,type call bdos POP H ; get pointer to format origin bytes mov d,m ; load bytes in de inx h mov e,m push d call serdp ; get start of format string table in hl pop d lxi b,8 xra a fmt1: srlr d rarr e ;shift and wait for a carry... jrc fmt2 dad b jr fmt1 fmt2: mvi b,8 fmt3: mov e,m ; got format string - now print 8 characters push h push b ; hl = string start mvi c,conout call bdos pop b pop h inx h djnz fmt3 call crlf ret ; this function puts the mode byte at MINFO and ; returns a pointer to it in the HL. It also places ; pointers to the actual mode byte and mask in ; MODPTR and MSKPTR and the drive number in DRVNUM ; GETMOD: LDA NDRIVE ; get logical drive number LHLD sysadr ; address of BIOS LXI D,lptbl-3 ; offset to POINTER TO mixer table DAD D CALL HLIHL ; MIXER TABLE MOV E,A ; use logical drive number as offset MVI D,0 ; into logical/physical table DAD D MOV A,M ; get physical drive number STA DRVNUM ; and save it away CPI 0FFH RZ ; return if no drive installed DROK: LXI B,search-3 ; address of search routine LHLD sysadr DAD B MOV C,A ; SEARCH REQUIRES DRIVE NUMBER IN REG. C call icall ;call module-search with A=physical drive number jc syserr shld module STA RELDSK ; ; CHECK IF DRIVER IS RECENT RELEASE (HAS MODE BYTES) ; DO THIS BY CHECKING FOR MULTIPLE STRINGS ; MVI A,1 ; more than one string in this release PUSH H ; SAVE MODULE ADDRESS CALL GETSTR POP H ; RESTORE MODULE ADDRESS ORA A ; and see if there are 2 strings mvi a,0feh rnz MVI A,30 ; a ridiculous string number CALL GETSTR ; DE points to null (we hope) XCHG ; make it HL DCX H ; POINT TO TERMINATOR MOV A,M CPI '$' ; IS IT A DOLLAR SIGN ? mvi a,0feh rnz ; additional check ; A=relative drive number ; HL=modtbl LHLD MODULE ; START OF MODULE LXI D,16 DAD D ; POINTER TO MODE TABLE CALL HLIHL ; MODE TABLE LDA RELDSK add a add a add a ; *8 mov e,a mvi d,0 dad d GOTADR: SHLD MODPTR ; save the mode byte pointer XCHG LXI H,4 ; +4 to mask DAD D SHLD MSKPTR ; save the mode byte mask pointer LXI H,MINFO ; internal storage buffer XCHG ; from HL to DE for LDIR LXI B,4 ; 4 bytes LDIR ; to store the mode byte internally LXI H,MINFO ; restore pointer LDA DRVNUM RET ; ; This subroutine searches for the driver text string specified ; by the accumulator. Strings are numbered 0-N. ; on entry: ; DE = pointer to driver ; A = desired string ; On exit: ; DE = pointer to desired string or first character ; past the last string (null in later releases) ; A = error code 0 = found, 0FFH = not found ; GETSTR: PUSH PSW ; save requested field LXI d,12 ; point to string vector DAD D ; to start of strings CALL HLIHL SHLD STRADR ; initial text pointer XRA A STA GETERR ; clear error flag STA FLDNUM ; set field number 0 NXTFLD: LDA GETERR ; check error flag ORA A JNZ GETXIT ; error if non zero SHLD STRADR ; start of search string MVI B,100 ; search 100 characters GETCHR: MOV A,M INX H ; point past separator CPI '$' ; field terminator JZ CHKEND ; DOLLAR SIGN OR NULL ORA A JZ CHKEND CPI ' ' JC SETERR DJNZ GETCHR SETERR: MVI A,0FFH STA GETERR ; set error flag JMP GETXIT CHKEND: LDA FLDNUM MOV B,A POP PSW ; get requested field PUSH PSW CMP B ; is this one correct JZ GETXIT ; found if zero INR B ; increment field number MOV A,B STA FLDNUM DCX H MOV A,M ; GET FIELD TERMINATOR INX H SHLD STRADR ; SET NEW STRING ADDRESS ORA A ; IS TERMINATOR A NULL ? JNZ SETERR ; IF NOT IT'S A '$' AND WE'VE HIT END OF STRING JMP NXTFLD ; BEFORE FINDING FIELD GETXIT: LDED STRADR ; string address POP PSW ; clean up stack LDA GETERR ; error flag RET ; THIS SUBROUTINE RESETS THE DRIVE that got THE NEW MODE BYTE ; RESET: LDA NDRIVE ; get drive number INR A ; start with 1-16 LXI D,1 ; 1 for drive A: LRST: DCR A ; decrement drive number JZ REST ; if zero, then DE is setup SLAR E ; shift left with zero fill RALR D ; shift left with carry JMP LRST ; keep shifting REST: MVI C,RESDRV ; BDOS reset drive function CALL BDOS RET ICALL: PCHL ; ; THIS FUNCTION RETURNS A TEXT STRING TO BE OUTPUT ; GETTXT: lhld module ; get module address lxi d,stroff ; address text string offset dad d mov e,m ; move to de inx h mov d,m ret ; ; LOAD HL INDIRECT THROUGH HL ; HLIHL: MOV C,M INX H MOV H,M MOV L,C RET ; ; specified drive does not exist ; NODRV: LXI D,NODRMS ; drive not sysgened message JMP ERXIT ; ; FDC driver is the wrong release level ; WRONG: LXI D,WRGMSG JMP ERXIT ; ; drive is in logical/physical table but has not been ; linked in. system error. ; SYSERR: LXI D,SERMSG ; drive not LINKed message JMP ERXIT ; ; driver is not FDC or Z37 ; FIXED: LXI D,DIFFER ; not FDC or Z37 driver JMP ERXIT ; ; this is the error for changing an invalid item ; NOCHG: LXI D,CHGMSG ; cannot change a parameter message MVI C,TYPE CALL BDOS LXI D,HALFHL JMP ERXIT ; ; Bad command line error ; ENDERR: LXI D,BADMSG ; bad command line message ERXIT: MVI C,TYPE ; error exit CALL BDOS DONE: LSPD OLDSP ; normal exit RET ; restore original stack pointer crlf lxi d,crlfmsg mvi c,type call bdos ret ; data storage ; HELP: DB 'The MODE utility is called in one of the following ways:' DB CR,LF,LF,' MODE',CR,LF DB 'Outputs HELP information',CR,LF,LF DB ' MODE d:',CR,LF DB 'Displays the present drive status to the user',CR,LF,LF HALFHL: DB ' MODE d:arg1,arg2,arg3',CR,LF DB 'Updates the present status and displays it. Valid' DB ' arguments are:',CR,LF,LF DB ' DS or SS = double or single sided',CR,LF DB ' QT, DT, ST = quad (192 tpi), double (96 tpi),',CR,LF db ' single (48 tpi), or',CR,LF DB ' QTD, QTS, DTS = half track modes',CR,LF DB ' e.g. DTS is 48 tpi media in a 96 tpi drive.',CR,LF DB ' DD or SD = double or single density',CR,LF DB ' S6, S30, etc. = step rate in milliseconds',CR,LF DB ' MMS, Z37, Z37X etc. (media formats); the X implies' DB ' extended format.',CR,LF,LF,'$' DIFFER: DB 'Drive ' DIFD: DB 'A: has a fixed configuration which cannot ' DB 'be determined by MODE.',CR,LF,'$' INCH5: DB '5.25 inch floppy',CR,LF,'$' INCH8: DB '8 inch floppy',CR,LF,'$' CTRMSG: DB ' Controller - $' SSMSG: DB ' Sides - 1',CR,LF,'$' DSMSG: DB ' Sides - 2',CR,LF,'$' SDMSG: DB 'Recording Density - Single',CR,LF,'$' DDMSG: DB 'Recording Density - Double',CR,LF,'$' T48MSG: DB ' Tracks per Inch - 48',CR,LF,'$' T96MSG: DB ' Tracks per Inch - 96',CR,LF,'$' T192MSG: DB ' Tracks per Inch - 192',CR,LF,'$' HALFTK: DB ' Tracks per Inch - 48 tpi media in 96 tpi drive (R/O)',CR,LF,'$' HAF2TK: DB ' Tracks per Inch - 48 tpi media in 192 tpi drive (R/O)',CR,LF,'$' HAF3TK: DB ' Tracks per Inch - 96 tpi media in 192 tpi drive (R/O)',CR,LF,'$' crlfmsg DB CR,LF,'$' fmtstr: DB ' Format Type - $' STRMSG: DB ' Step Rate - $' STRATE: DB '00 milliseconds',CR,LF,'$' DRSTR: DB ' Drive - ' DSKLT: DB 'A: (' DSKNM: DB ' ) $' TTLE0: DB 'PRESENT Configuration is:',CR,LF,'$' TTLE1: DB 'NEW Configuration is:',CR,LF,'$' BADMSG: DB 'Invalid command line or command line arguments.',CR,LF,'$' CHGMSG: DB 'The requested format is invalid for the specified drive.' DB CR,LF,'The complete configuration must be supplied',CR,LF,'$' NODRMS: DB 'A: does not exist.',CR,LF,'$' WRGMSG: DB 'The driver module for ' WRGD: DB 'A: is incompatible with MODE.',CR,LF,'$' DB ' inoperative.',CR,LF,'$' SERMSG: DB 'Drive is specified but not linked - ERROR IN SYSTEM-' DB CR,LF,'$' STRTBL: DB ' 6122030 3 61015' ; possible step rates, 2 bytes each STEPTB reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO ReaGDSK DB 2 ; CURRENT DRIVE SELECTED BY THIS MODULE BLCODE DB 0 SELERR: DB 0 SELOP: DB false MODFLG: DB 0 TRKS: DB 255,255,0 htflag: db 0 mtflg: db 0 END ڣ3͗@YsY̓Y׬Yͅ:߫Asү:@ү@ү$̓—>2—͇ͱ* «>2͙wBp+ү:w͚AP{ 2W>O2ø}R* ):r"ök*w)*c)-}ͤ NEG ;AND NUMBER OF TRACKS WOULD BE NEGATIVE STOUT: MOV L,A ;COUNTER FOR STEPING SEEK5: BIT 5,H ; CHECK FOR 48 TPI DISK IN 96 TPI DRIVE JRZ NOTHT RES 4,B ;SELECT NO-UPDATE CALL TYPE$I ;STEP HEAD ANI 00000100B SHL 1 ;DID THIS STEP PUT US AT TRACK 0 ? JRNZ TRK0ERR bit 6,h ; added bit for QT JRZ NOTQT CALL TYPE$I ;STEP HEAD ANI 00000100B SHL 1 ;DID THIS STEP PUT US AT TRACK 0 ? JRNZ TRK0ERR CALL TYPE$I ;STEP HEAD ANI 00000100B SHL 1 ;DID THIS STEP PUT US AT TRACK 0 ? JRNZ TRK0ERR NOTQT: SETB 4,B ;SELECT UPDATE TO TRACK-REG notht: CALL TYPE$I ;STEP HEAD ANI 00000100B SHL 1 ;DID THIS STEP PUT US AT TRACK 0 ? JRNZ TRK0ERR DCR L JRNZ SEEK5 IN fdcsec ;SAVE CURRENT SECTOR NUMBER MOV L,A CALL READ$ADDR ; GET ACTUAL TRACK UNDER HEAD (IN SECTOR REG) in fdcsec ;GET TRACK NUMBER FROM MEDIA MOV H,A MOV A,L OUT fdcsec ;RESTORE SECTOR NUMBER LDA @dstat ;GET TRUE ERROR STATUS OF READ-ADDRESS RLC RC ;DRIVE NOT READY ANI 00011000B SHL 1 ; CRC ERROR + REC-NOT-FOUND MOV A,H ; ACTUAL TRACK FROM READ-ADDRESS LXI H,SEKERR ;POINT TO ERROR COUNTERS JRNZ RESTR0 CMP C ; (C) MUST STILL BE VALID DEST. TRACK RZ ;NO ERRORS RTS00: DCR M ; SHOULD WE KEEP TRYING ? STC RZ ;NO, WE'VE TRYED TOO MUCH OUT fdctrk ; re-define head position accordingly JR RETRS ; RETRY SEEK TRK0ERR: XRA A LXI H,SEKERR JR RTS00 RESTR0: INX H ; RESTORE ERROR COUNT DCR M STC RZ ; If count 0, return with Carry set. MOV A,M CPI 9 JRNC RESTR1 ; RESTORE ONLY FIRST TIME CALL STEPIN ; OTHERWISE STEP HEAD IN 1 TRACK JR RETRS RESTR1: ; RESTORE HEAD TO TRACK 0 MVI A,00000011B STA STEPRA ; RETRY WITH MAXIMUM STEP RATE CALL HOME jmp RETRS ; RETRY SEEK STEPIN: lda htflag mov c,a ora a ; CHECK HALF TRACK modes MVI B,01001000B ; STEP IN WITHOUT UPDATE CNZ TYPE$I ; STEP A SECOND TIME (W/O UPDATE) FOR HALF-TRK bit 6,c ; QT CNZ TYPE$I ; STEP A THIRD TIME (W/O UPDATE) FOR QUARTER-TRK bit 6,c ; QT CNZ TYPE$I ; STEP A FOURTH TIME (W/O UPDATE) FOR QUARTER-TRK MVI B,01011000B ; STEP IN AND UPDATE TRACK REGISTER JR TYPE$I HOME: ;POSITION HEAD AT TRACK ZERO... mvi a,11010000b ;force TYPE$I status out fdccomd in fdcstat ANI 00000100B ;TEST TRACK ZERO SENSOR, JRNZ @TRK0 ;SKIP ROUTINE IF WE'RE ALREADY AT TRACK 0. IN fdctrk ;DOES THE SYSTEM THINK WE'RE AT TRACK 0 ?? ORA A JRNZ HOME1 ;IF IT DOESN'T, ITS PROBEBLY ALRIGHT TO GIVE "RESTORE" MVI L,6 ;(6 TRKS) ;ELSE WE COULD BE IN "NEGATIVE TRACKS" SO... MVI B,01001000B ;WE MUST STEP-IN A FEW TRACKS, LOOKING FOR THE HOME0: CALL TYPE$I ;TRACK ZERO SIGNAL. ANI 00000100B SHL 1 ;"SHL 1" BECAUSE TYPE$I DOES AN "RLC" JRNZ @TRK0 DCR L JRNZ HOME0 HOME1: MVI B,00001000B ;RESTORE COMMAND, WITH HEADLOAD CALL TYPE$I XRI 00000100B SHL 1 ;TEST TRACK-0 SIGNAL RAR RAR RAR RAR ;[CY] = 1 IF NOT AT TRACK 0 @TRK0: MVI A,0 OUT fdctrk ;MAKE SURE EVERYONE KNOWS WERE AT TRACK 0 RET ; READ$ADDR: mvi a,11000100B ; READ-ADDRESS COMMAND WITH SETTLE DELAY jr PUT$I TYPE$I: LDA STEPRA ; STEP-RATE BITS ORA B ; MERGE COMMAND PUT$I: OUT fdccomd ; SEND command TO CONTROLLER WB: IN fdcstat ; WAIT FOR BUSY SIGNAL RAR ; TO COME UP JRNC WB WNB: IN fdcstat ; poll controller for function-complete RAR ; Busy? JRC WNB ; wait until not busy. RAL STA @dstat ;SAVE TYPE II (III) STATUS FOR ERROR DETECTION. MVI A,11010000B ;TERMINATE COMMAND (RESET STATUS TO TYPE 1) OUT fdccomd IN fdcdata ; in fdcstat ; rlc ret setside: lda @side xri 00000001b ; active low output rlc ! rlc mov c,a di in sysctl ani 10111011b ; clear old side bit ora c ; add new side bit out sysctl ei ret STEPRA DB 0 ; STEP RATE CODE RETRYS DB 0 SEKERR DB 0,0 ; SEEK,RESTORE ERROR COUNTS CMODE DW 0 ; POINTER TO MODE BYTE LOGDSK DB 2 ; CURRENT DRIVE SELECTED BY THIS MODULE BLCODE DB 0 SELERR: DB 0 SELOP: DB false MODFLG: DB 0 TRKS: DB 255,255,0 htflag: db 0 mtflg: db 0 END : DB 7,13,21,31,4,7,11,16 MODULE: DW 0 RELDSK: DB 0 MINFO: DB 0,0,0,0 MODPTR: DW 0 MSKPTR: DW 0 CMDPTR: DW 0 DRVNUM: DB 0 STRADR: DW 0 GETERR: DB 0 FLDNUM: DB 0 NEWARG: DB 0 NDRIVE: DB 0 ; 0 to 15 CNFIG: DB 0 ; MMS=0, MMSD=1,Z17=2 (ALL + '0') TRACK: DB 0 ; D or S or Q nibble, with optional D or S nibble SIDE: DB 0 ; D or S DENSITY: DB 0 ; D or S STEPRT: DB 0 ; binary number OLDSP: DW 0 DS 32 STACK: DS 0 END d-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS .Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extendule C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The following BDOS 3 functions are now supported on networked drives: 17 - SEARCH FIRST (enhancement) 18 - SEARCH NEXT (enhancement) 46 - GET DISK FREE SPACE 48 - FLUSH BUFFERS 98 - FREE BLOCKS 99 - TRUNCATE FILE 101 - GET DIR LAEL BYTE 102 - READ FILE DATE/PASSWORD MODE 105 - GET TIME AND DATE SEARCH functions were enhanced to return a full sector of directory entries in the case of searching with the drive set to '?', as is done by DIR.COM with the [FULL] option. This allows retrieval of SFCB data from the last directory entry of each block (which is not otherwise returned). GET TIME AND DATE does not require networked disks and is not used by NDOS3, but may be used by other programs such as NTPDATE. ///2NDOS3 Syntax: NDOS3 The NDOS3 command is a simple loader for the NDOS3 RSX. It loads NDOS3 regardless of whether it is already loaded. Once loaded and resident, NDOS3 implements CP/NET - all calls to BDOS function 12 GET VERSION return H with bit 02H set to indicate CP/NET is active. ///1CPNETSTS Syntax: CPNETSTS Explanation: The CPNETSTS command displays the requester configuration table. The requester configuration table indicates the status of each logical device that is either local or assigned to a specific server on the network. Example: A>NETSTAT CP/NET 1.2 Status ================= Requester ID = 02H Network Status Byte = 10H Disk device status: Drive A: = LOCAL Drive B: = LOCAL Drive C: = LOCAL Drive D: = LOCAL Drive E: = LOCAL Drive F: = LOCAL Drive G: = LOCAL Drive H: = LOCAL Drive I: = LOCAL Drive J: = LOCAL Drive K: = LOCAL Drive L: = LOCAL Drive M: = LOCAL Drive N: = LOCAL Drive O: = LOCAL Drive P: = Drive F: on Network Server ID = 00H Console Device = LOCAL List Device = LOCAL ///1DATE Syntax: DATE {CONTINUOUS} DATE {time-specification} DATE SET Explanation: The DATE command lets you display and set the date and time of day. ///2Examples A>DATE Displays the current date and time. A>DATE C Displays the date and time continuously. A>DATE 08/14/82 10:30:0 Sets the date and time. A>DATE SET Prompts for date and time entries. ///1DEVICE Syntax: DEVICE { NAMES | VALUES | physical-dev | logical-dev} DEVICE logical-dev=physical-dev {option} {,physical-dev {option},...} DEVICE logical-dev = NULL DEVICE physical-dev {option} DEVICE CONSOLE [ PAGE | COLUMNS = columns | LINES = lines] Explanation: DEVICE displays current logical device assignments and physical device names. DEVICE assigns logical devices to peripheral devices attached to the computer. DEVICE also sets the communications protocol and speed of a peripheral device, and displays or sets the current console screen size. ///2Options [ XON | NOXON | baud-rate ] XON refers to the XON/XOFF communications protocol. NOXON indicates no protocol and the computer sends data to the device whether or not the device is ready to receive it. baud-rate is the speed of the device. The system accepts the following baud rates: 50 75 110 134 150 300 600 1200 1800 2400 3600 4800 7200 9600 19200 ///2Examples A>DEVICE Displays the physical devices and current assignments of the logical devices in the system. A>DEVICE NAMES Lists the physical devices with a summary of the device characteristics. A>DEVICE VALUES Displays the current logical device assignments. A>DEVICE CRT Displays the attributes of the physical device CRT. A>DEVICE CON Displays the assignment of the logical device CON: A>DEVICE CONOUT:=LPT,CRT Assigns the system console output (CONOUT:) to the printer (LPT) and the screen (CRT). A>DEVICE AUXIN:=CRT2 [XON,9600] Assigns the auxiliary logical input device (AUXIN:) to the physical device CRT using protocol XON/XOFF and sets the transmission rate for the device at 9600. A>DEVICE LST:=NULL Disconnects the list output logical device (LST:). A>DEVICE LPT [XON,9600] Sets the XON/XOFF protocol for the physical device LPT and sets the transmission speed at 9600. A>DEVICE CONSOLE [PAGE] Displays the current console page width in columns and length in lines. A>DEVICE CONSOLE [COLUMNS=40 LINES=16] Sets the screen size to 40 columns and 16 lines. ///1DIR The DIR command displays the names of files and the characteristics associated with the files. The DIR command has three distinct references: DIR DIRS DIR with Options DIR and DIRS are built-in utilities. DIR with Options is a transient utility and must be loaded into memory from the disk. ///2Built-in Syntax: DIR {d:} DIR {filespec} DIRS {d:} DIRS {filespec} Explanation: The DIR and DIRS Built-in commands display the names of files cataloged in the directory of an on-line disk. DIR lists the names of files in the current user number that have the Directory (DIR) attribute. DIR accepts the * and ? wildcards in the file specification. ///3Examples A>DIR Displays all files in user 0 on drive A that have the Directory attribute. A>DIR B: Displays all DIR files in user 0 on drive B. 2A>DIR C:ZIPPY.DAT Displays the name ZIPPY.DAT if the file is in user 2 on drive C. 4A>DIR *.BAS Displays all DIR files with filetype BAS in user 4 on drive A. B3>DIR X*.C?D Displays all DIR files in user 3 on drive B whose filename begins with the letter X, and whose three character filetype contains the first character C and last character D. A>DIRS Displays all files for user 0 on drive A that have the system (SYS) attribute. A>DIRS *.COM Displays all SYS files with filetype COM on drive A in user 0. A command (.COM) file in user 0 with the system attribute can be accessed from any user number on that drive, and from any drive in the search chain (see SETDEF). ///2withOptions Syntax: DIR {d:} [options] DIR {filespec} {filespec} ... [options] Explanation: The DIR command with options is an enhanced version of the DIR built-in command and displays your files in a variety of ways. DIR can search for files on any or all drives, for any or all user numbers. One or two letters is sufficient to identify an option. You need not type the right hand square bracket. ///3Options Option Function ATT displays the file attributes. DATE displays date and time stamps of files. DIR displays only files that have the DIR attribute. DRIVE=ALL displays files on all on-line drives. DRIVE=(A,B,C,...,P) displays files on the drives specified. DRIVE=d displays files on the drive specified by d. EXCLUDE displays files that DO NOT MATCH the files specified in the command line. FF sends an initial form feed to the printer device if the printer has been activated by CTRL-P. FULL shows the name, size, number of 128-byte records, and attributes of the files. If there is a directory label on the drive, DIR shows the password protection mode and the time stamps. If there is no directory label, DIR displays two file entries on a line, omitting the password and time stamp columns. The display is alphabetically sorted. (See SET for a description of file attributes, directory labels, passwords and protection modes.) LENGTH=n displays n lines of printer output before inserting a table heading. n is a number between 5 and 65536. MESSAGE displays the names of drives and user numbers DIR is searching. NOSORT displays files in the order it finds them on the disk. RO displays only the files that have the Read-Only attribute. RW displays only the files that are set to Read-Write. SIZE displays the filename and size in kilobytes (1024 bytes). SYS displays only the files that have the SYS attribute. USER=ALL displays all files in all user numbers for the default or specified drive. USER=n displays the files in the user number specified by n. USER=(0,1,...,15) displays files under the user numbers specified. ///3Examples A>DIR C: [FULL] Displays full set of characteristics for all files in user 0 on drive C. A>DIR C: [DATE] Lists the files on drive C and their dates. A>DIR D: [RW,SYS] Displays all files in user 0 on drive D with Read-Write and System attributes. 3A>DIR [USER=ALL, DRIVE=ALL] Displays all the files in all user numbers (0-15) in all on- line drives. B6>DIR [exclude] *.DAT Lists all the files on drive B in user 6 that do not have a filetype of .DAT. 3B>DIR [SIZE] *.PLI *.COM *.ASM Displays all the files of type PLI, COM, and ASM in user 3 on drive B in size display format. A>DIR [drive=all user=all] TESTFILE.BOB DIR displays the filename TESTFILE.BOB if it is found on any drive in any user number. A>DIR [size,rw] D: DIR lists each Read-Write file that resides on Drive D, with its size in kilobytes. Note that D: is equivalent to D:*.*. ///1DSKRESET Syntax: DSKRESET {drive(s)} Explanation: The DSKRESET command functions exactly like the PRL that executes under MP/M II. DSKRESET resets the specified drive, so a disk can be changed. drive(s) is a comma-separated list of the drive names to be reset. Example: A>DSKRESET P: ///1DUMP Syntax: DUMP filespec Explanation: DUMP displays the contents of a file in hexadecimal and ASCII format. Example: A>DUMP ABC.TEX ///1ed Format: ED input-filespec {d:|output-filespec} Explanation: Character file editor. To redirect or rename the new version of the file specify the destination drive or destination filespec. ///2commands ED Command Summary Command Action nA append n lines from original file to memory buffer 0A append file until buffer is one half full #A append file until buffer is full (or end of file) B, -B move CP to the beginning (B) or bottom (-B) of buffer nC, -nC move CP n characters forward (C) or back (-C) through buffer nD, -nD delete n characters before (-D) or from (D) the CP E save new file and return to CP/M-86 Fstring{^Z} find character string H save new file, reedit, use new file as original file I enter insert mode Istring{^Z} insert string at CP Jsearch_str^Zins_str^Zdel_to_str juxtapose strings nK, -nK delete (kill) n lines from the CP nL, -nL, 0L move CP n lines nMcommands execute commands n times n, -n move CP n lines and display that line n: move to line n :ncommand execute command through line n Nstring{^Z} extended find string O return to original file nP, -nP move CP 23 lines forward and display 23 lines at console Q abandon new file, return to CP/M-86 R{^Z} read X$$$$$$$.LIB file into buffer Rfilespec{^Z} read filespec into buffer Sdelete string^Zinsert string substitute string nT, -nT, 0T type n lines U, -U upper-case translation V, -V line numbering on/off 0V display free buffer space nW write n lines to new file 0W write until buffer is half empty nX write or append n lines to X$$$$$$$.LIB nXfilespec{^Z} write n lines to filespec; append if previous xcommand applied to same file 0x{^Z} delete file X$$$$$$$.LIB 0xfilespec{^Z} delete filespec nZ wait n seconds Note: CP points to the current character being referenced in the edit buffer. Use {^Z} to separate multiple commands on the same line. ///2Examples A>ED TEST.DAT A>ED TEST.DAT B: A>ED TEST.DAT TEST2.DAT A>ED TEST.DAT B:TEST2.DAT ///1erase Syntax: ERASE {filespec} {[CONFIRM]} Explanation: The ERASE command removes one or more files from the directory of a disk. Wildcard characters are accepted in the filespec. Directory and data space are automatically reclaimed for later use by another file. The ERASE command can be abbreviated to ERA. ///2Option [CONFIRM] option informs the system to prompt for verification before erasing each file that matches the filespec. CONFIRM can be abbreviated to C. ///2Examples A>ERASE X.PAS Removes the file X.PAS from the disk in drive A. A>ERA *.PRN Confirm (Y/N)?Y All files with the filetype PRN are removed from the disk in drive A. B>ERA A:MY*.* [CONFIRM] Each file on drive A with a filename that begins with MY is displayed with a question mark for confirmation. Type Y to erase the file displayed, N to keep the file. A>ERA B:*.* Confirm (Y/N)?Y All files on drive B are removed from the disk. ///1filespec FILESPEC FORMAT CP/M 3 identifies every file by its unique file specification, which can consist of four parts: the drive specification, the filename, the filetype and the password. The term "filespec" indicates any valid combination of the four parts of a file specification, all separated by their appropriate delimiters. A colon must follow a drive letter. A period must precede a filetype. A semicolon must precede a password. The symbols and rules for the parts of a file specification follow: d: drivespec optional single alpha character (A-P) filename filename 1-8 letters and/or numbers typ filetype optional 0-3 letters and/or numbers password password optional 0-8 letters and/or numbers Valid combinations of the elements of a CP/M 3 file specification are: filename d:filename filename.typ d:filename.typ filename;password d:filename;password filename.typ;password d:filename.typ;password If you do not include a drive specifier, CP/M 3 automatically uses the default drive. Some CP/M 3 commands accept wildcard (* and ?) characters in the filename and/or filetype parts of the command tail. A wildcard in the command line can in one command reference many matching files on the default or specified user number and drive. (See Commands). ///1GENCOM Syntax: GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL | SCB=(offset,value)]} Explanation: The GENCOM command creates a special COM file with attached RSX files. The GENCOM command can also restore a previously GENCOMed file to the original COM file without the header and RSX's. GENCOM can also attach header records to COM files. ///2Options LOADER sets a flag to keep the program loader active. NULL indicates that only RSX files are specified. GENCOM creates a dummy COM file for the RSX files. The output COM filename is taken from the filename of the first RSX-filespec. SCB=(offset,value) sets the System Control Block from the program by using the hex values specified by (offset,value). ///2Examples A>GENCOM MYPROG PROG1 PROG2 Generates a new COM file MYPROG.COM with attached RSX's PROG1 and PROG2. A>GENCOM PROG1 PROG2 [NULL] Creates a COM file PROG1.COM with RSX's PROG1 and PROG2. A>GENCOM MYPROG GENCOM takes MYPROG.COM, strips off the header and deletes all attached RSX's to restore it to its original COM format. A>GENCOM MYPROG PROG1 PROG2 GENCOM looks at the already-GENCOMed file MYPROG.COM to see if PROG1.RSX and PROG2.RSX are already attached RSX files in the module. If either one is already attached, GENCOM replaces it with the new RSX module. Otherwise, GENCOM appends the specified RSX files to the COM file. ///1GET Syntax: GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]} GET {CONSOLE INPUT FROM} CONSOLE Explanation: GET directs the system to take console input from a file for the next system command or user program entered at the console. Console input is taken from a file until the program terminates. If the file is exhausted before program input is terminated, the program looks for subsequent input from the console. If the program terminates before exhausting all its input, the system reverts back to the console for console input. With the SYSTEM option, the system immediately goes to the specified file for console input. The system reverts to the console for input when it reaches the end of file. Re-direct the system to the console for console input with the GET CONSOLE INPUT FROM CONSOLE command as a command line in the input file. ///2Options ECHO specifies that input is echoed to the console. This is the default option. NO ECHO specifies that file input is not echoed to the console. The program output and the system prompts are not affected by this option and are still echoed to the console. SYSTEM specifies that all system input is immediately taken from the disk file specified in the command line. GET takes system and program input from the file until the file is exhausted or until GET reads a GET console command from the file. ///2Examples A>GET FILE XINPUT A>MYPROG Tells the system to activate the GET utility. Since SYSTEM is not specified, the system reads the next input line from the console and executes MYPROG. If MYPROG program requires console input, it is taken from the file XINPUT. When MYPROG terminates, the system reverts back to the console for console input. A>GET FILE XIN2 [SYSTEM] Immediately directs the system to get subsequent console input from file XIN2 because it includes the SYSTEM option. The system reverts back to the console for console input when it reaches the end of file in XIN2. Or XIN2 may redirect the system back to the console if it contains a GET CONSOLE command. A>GET CONSOLE Tells the system to get console input from the console. This command may be used in a file (previously specified in a GET FILE command), which is already being read by the system for console input. It is used to re-direct the console input back to the console before the end-of-file is reached. ///1HELP Syntax: HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]} Explanation: HELP displays a list of topics and provides summarized information for CP/M 3 commands. HELP topic displays information about that topic. HELP topic subtopic displays information about that subtopic. One or two letters is enough to identify the topics. After HELP displays information for your topic, it displays the special prompt HELP> on your screen, followed by a list of subtopics. - Enter ? to display list of main topics. - Enter a period and subtopic name to access subtopics. - Enter a period to redisplay what you just read. - Press the RETURN key to return to the CP/M 3 system prompt. - [NOPAGE] option disables the 24 lines per page console display. - Press any key to exit a display and return to the HELP> prompt. Examples: A>HELP A>HELP DATE A>HELP DIR OPTIONS A>HELP>.OPTIONS HELP>SET HELP>SET PASSWORD HELP>.PASSWORD HELP>. HELP> ///1HEXCOM Syntax: HEXCOM filename Explanation: The HEXCOM Command generates a command file (filetype .COM) from a .HEX input file. It names the output file with the same filename as the input file but with filetype .COM. HEXCOM always looks for a file with filetype .HEX. Example: A>HEXCOM B:PROGRAM Generates a command file PROGRAM.COM from the input hex file PROGRAM.HEX. ///1INITDIR Syntax: INITDIR {d:} Explanation: The INITDIR Command initializes a disk directory to allow date and time stamping of files on that disk. INITDIR can also recover time/date directory space. Example: A>INITDIR C: INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE. Do you want to re-format the directory on C: (Y/N)?Y ///1LIB Syntax: LIB filespec{[I|M|P|D]} LIB filespec{[I|M|P]}=filespec{modifier} {,filespec{modifier} ... } Explanation: A library is a file that contains a collection of object modules. Use the LIB utility to create libraries, and to append, replace, select or delete modules from an existing library. Use LIB to obtain information about the contents of library files. LIB creates and maintains library files that contain object modules in Microsoft REL file format. These modules are produced by Digital Research's relocatable macro-assembler program, RMAC, or any other language translator that pruduces modules in Microsoft REL file format. You can use LINK-80 to link the object modules contained in a library to other object files. LINK-80 automatically selects from the library only those modules needed by the program being linked, and then forms an executable file with a filetype of COM. ///2Options I The INDEX option creates an indexed library file of type .IRL. LINK-80 searches faster on indexed libraries than on non-indexed libraries. M The MODULE option displays module names. P The PUBLICS option displays module names and the public variables for the new library file. D The DUMP option displays the contents of object modules in ASCII form. ///2Modifiers Use modifiers in the command line to instruct LIB to delete, replace, or select modules in a library file. Angle brackets enclose the modules to be deleted or replaced. Parentheses enclose the modules to be selected. LIB Modifiers Delete Replace If module name and filename are the same this shorthand can be used: Select (modFIRST-modLAST,mod1,mod2,...,modN) ///2Examples A>LIB TEST4[P] Displays all modules and publics in TEST4.REL. A>LIB TEST5[P]=FILE1,FILE2 Creates TEST5.REL from FILE1.REL and FILE2.REL and displays all modules and publics in TEST5.REL. A>LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6) Creates a library file TEST.REL from modules in two source files. TEST1.REL contributes MOD1 and MOD4. LIB extracts modules C1, C4, and all the modules located between them, as well as module C6 from TEST2.REL. A>LIB FILE2=FILE3 Creates FILE2.REL from FILE3.REL, omitting MODA which is a module in FILE3.REL. A>LIB FILE6=FILE5 Creates FILE6.REL from FILE5.REL, FILEB.REL replaces MODA. A>LIB FILE6=FILE5 Module THISNAME is in FILE5.REL. When LIB creates FILE6.REL from FILE5.REL the file THISNAME.REL replaces the similarly named module THISNAME. A>LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY) Creates FILE1.IRL on drive A from the selected modules PLOTS, FIND, and modules SEARCH through the module DISPLAY, in FILE2.REL on drive B. ///1LINK Syntax: LINK d:{filespec,{[options]}=}filespec{[options]}{,...} Explanation: LINK combines relocatable object modules such as those produced by RMAC and PL/I-80 into a .COM file ready for execution. Relocatable files can contain external references and publics. Relocatable files can reference modules in library files. LINK searches the library files and includes the referenced modules in the output file. See the CP/M 3 Programmer's Utilities Guide for a complete description of LINK- 80. ///2Options Use LINK option switches to control execution parameters. Link options follow the file specifications and are enclosed within square brackets. Multiple switches are separated by commas. LINK-80 Options A Additional memory; reduces buffer space and writes temporary data to disk B BIOS link in banked CP/M 3 system. 1. Aligns data segment on page boundary. 2. Puts length of code segment in header. 3. Defaults to .SPR filetype. Dhhhh Data origin; sets memory origin for common and data area Gn Go; set start address to label n Lhhhh Load; change default load address of module to hhhh. Default 0100H Mhhhh Memory size; Define free memory requirements for MP/M modules. NL No listing of symbol table at console NR No symbol table file OC Output .COM command file. Default OP Output .PRL page ///1commands CP/M 3 Command Format: A>COMMAND {command tail} A CP/M 3 command line is composed of a command, an optional command tail, and a carriage return. The command is the name or filename of a program to be executed. The optional command tail can consist of a drive specification, one or more file specifications, and some options or parameters. ///2conventions COMMAND CONVENTIONS The following special symbols define command syntax. {} surrounds an optional item. | separates alternative items in a command line. indicates a carriage return. ^ indicates the Control Key. n substitute a number for n. s substitute a string (group) of characters for s. o substitute an option or option list for o. [] type square brackets to enclose an option list. () type parens to enclose a range of options within an option list. RW Read-Write attribute - opposite of RO RO Read-Only attribute - opposite of RW SYS System attribute - opposite of DIR DIR Directory attribute - opposite of SYS ... preceding element can be repeated as many times as desired. * wildcard: replaces all or part of a filename and/or filetype. ? wildcard: replaces any single character in the same position of a filename and/or filetype. ///1cntrlchars Control Character Function CTRL-A moves cursor one character to the left. Banked system only. CTRL-B moves cursor from beginning to end of command line and back without affecting command. Banked system only. CTRL-C stops executing program when entered at the system prompt or after CTRL-S. CTRL-E forces a physical carriage return without sending command to CP/M 3. CTRL-F moves cursor one character to the right. Banked system only. CTRL-G deletes character at current cursor position if in the middle of a line. Banked system only. CTRL-I same as the TAB key. CTRL-H delete character to the left of cursor. CTRL-J moves cursor to the left of the command line and sends command to CP/M 3. Line feed, has same effect as carriage return. CTRL-K deletes character at cursor and all characters to the right. CTRL-M same as carriage return. CTRL-P echoes console output to the list device. CTRL-Q restarts screen scrolling after a CTRL-S. CTRL-R retypes the characters to the left of the cursor on a new line; updates the command line buffer. CTRL-S stops screen scrolling. CTRL-U updates the command line buffer to contain the characters to the left of the cursor; deletes current line. CTRL-W recalls previous command line if current line is empty; otherwise moves cursor to end of line. CTRL-J,-M,-R,-U and RETURN update the command line buffer for recall with CTRL-W. Banked system only. CTRL-X deletes all characters to the left of the cursor. ///1COPYSYS Syntax: COPYSYS Explanation: COPYSYS copies the CP/M 3 system from a CP/M 3 system diskette to another diskette. The new diskette must have the same format as the original system diskette. Example: A>COPYSYS ///1CPNET CP/NET on CP/M 3 CP/NET on CP/M 3 uses an RSX that combines the functions of the NDOS and SNIOS from CP/NET on CP/M 2.2. It also provides support for more functions, particularly those available to CP/M 3 programs. The RSX may be removed, allowing dynamic switching between CP/NET (with reduced TPA) and normal operation. CP/NET on CP/M 3 does not (currently) support networked console. ///2EXTENSIONS EXTENSIONS TO NDOS FOR CP/M 3 The f306c4h512z17p1l