TD2On ;Altos Series 5 MP/M version 2.10 Rev B (from original 5 1/4" DSQD disk) 4D!1"p  z !o:n 0(/*p "pz 8>2n##MRv*~} | yχlMG "  MP/M II V2.1 Loader Copyright (C) 1982, Digital Research $COPYRIGHT (C) 1981, DIGITAL RESEARCH Dsk rd err$ Synchronization: Serial numbers do not match$ ?$Nmb of consoles = $ Breakpoint RST # = $ Memory Segment Table: $SYSTEM DAeTTMPD DATUSERSYS STKXIOSJMP TBLRESBDOS SPRXDOS SPRBNKXIOS SPRBNKBDOS SPRBNKXDOS SPRTMP SPRLx ~S*  ~YH * ~SHҿ . * DMz -· _og^#V))) DM!>)) = ^#V) O{ozgi`N#Fogo&og*w ! 6!\"· #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6??RSP??BRSMPM SYS ~SHҿ . * DMz -· _og^#V))) DM!>)) = ^#V) O{ozgi`N#Fogo&og*w ! 6!\"· #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6??RSP?? BRSMPM wCKLSTS DATCONSOLE DAT --- $MP/M II Sys$Memseg Usr$ Bank $No break, CP/M debugger overlaid by MP/M$failed to read MPM.SYS$ MPMLDR error: $1, " #*\ "V !"Z *Z #"Z  z>V +s#rBKz w!", ð@*g& " \o͙a !*\ \ +|£ 1, *, DM!vv!. q*. & !0 p+q*/     !2 p+q*1  !4 p+q*3  !6 p+q*5    !7 q!9 6+60:7 dT!9 6+4+~dw=:9 g*8 M!8 60:7 ~!9 6+4+~ wg:9 SYS ~SHҿ . * DMz -· _og^#V))) DM!>)) = ^#V) O{ozg "{2p!"9"12z2x!y%K!D _^#V       [*MDy! ͻ ! õ ! õ ! ͻ o:A2  yy Bdos Err On : $Bad Sector$Select$File R/O$:!  2>:> :y!4 5~yU5 6y $ $:a $ $ $O Ҍ*8 M:7 0O!: q> !: ұ:: A Oú:: 0O!; q:; O͖:; O͖!= p+q  *< |Oͻ*< }OͻH!@ s+p+q!A 6:@ =!A ,*A &*> >O!A 4 !C p+q*B DM !I r+s+p+q+p+q*D DM-*F DM*H DM&!M s+q+p+q*J *L & *M & >!Q r+s+p+q!R 6#6:R <2R O*N :S <2S O*P ë>!R >P >#H!", ð*P #"P ã*V DMV X DM&\z M.  -<!{ ", ðz [ðz oð*\& "\ "V [y [*MDy! ͻ ! õ ! õ ! ͻ oA^#V! ! ! !  w#:O|^#V#"M##"O##"Q##"j!S*U![*`|!w6/6>!hN#F*Ow#w*Qw#w'!N#F*Q^#V*O~#foyx*[{_zW+i*[yxڑ#*hDM*Os#r*Qs#ryOxG*j0MD!!]N:} G>O:| * :wn& ^#VO"*}:]*)=:^O:}o"* *!-~2}~2{%:_2|-:oO:}w:{w |g}od*c""V*]M͖*^M͖*V DM>:]=:_:k==2*cMk=!d:cN_kH!g:dN_k:! 6*Z" * & ) * s#r> ʇ: <2 * ^#V" W*g& * & ) q#p: =2 .* & ) > ##DMd -d * & ) O! * & )  N#F>áS!i:hN_k^!j:iN_ki!N:jN_kt!S:NN_k:T ! 6*V" * & ) * s#r> ʍ: <2 * ##" *S# ‡ )Ï:O!͎yoxg*G:Oc}!GN#F͕"G*b*Ms#r ~ͨo$*S:*~6w>2**M{#zr+s{ozg**f$́*W* SͶwN#F$!KU!SU+aU[aM[*S*K!~#a:…#~$…L* ^#V" U*S& * & ) q#p: =2  .* & ) > DMo -o * & ) O! * & )  N#F>ç:U2  :S2 ! |O: 2 ! : N_k:]` : 2 !]: 2 ! : N_k!" !b 6:k=!b * DM!" *b &))l N`i DM*b &))l  N`i DM:` *b &))l  N1&:b <2b r ! : ! !:\ !", ð: *w ! 6!\" * #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6t * >2 !l"  * =2a:n2:_/GyO͚͊*s:rOy?x  ¨N͗¨# :2!n~Яw͓>2>2n!rq*"s͓3è ͊6gͨ8PYye Ҁ*`{z҈BKҀT<!* pg Ì *~w͊ ͌ͨù ͊ ͌ͨ͊%~* ! N!Fwyx>>*w~#+w#w+ɯ2ͨ͊ * :wt~gwm~¬É&&¬F'@$ @ $!$I!"@! $AI$$! "B $ "H@"! $ HD@DH"$@!$$ H  ! @AA@H@HBD@@BI@$ $HBD!B HI$$$"$ D$"HIHBI$I$DH@"R#¬ # Y ڣw ~>2l͛!5*!F"͊"!w# ! w͡2l4͊* ~<wG:_!l9 4~D͊9:m2o>2m::}!{tŠ2}:Šʊ VMQ*I:Oc}*IMD͕"I2:p!wÍ>2x*~=2p:2y~2zwͱ:*w!"G"I2!"K[ÍñͽͽJ*"K[:x<*6:z<w:y2pͱ**}Do>2m::}!{tŠ2}:Šʊ IA $@ ! !!HB!DHII @  ! $  B @A $!BI "@$" "$I$I! @ !D$BB$"I$  $!D$$I$I$$"A$$I  @I I$ @"H @ @@BHABIA $ @@1 !/ a #   # ʶʭ # 2@m R zI =C =: zzʶʭʕz Ÿ zO=! 3UVMQ*I:Oc}*IMD͕"I2:p!wÍ>2x*~=2p:2y~2zwͱ:*w!"G"I2!"K[5> `ÅCÚò>>#!@6#| !^|G!V ÁϏ7^p>// y.2>2M!X*W!/`o͚*W~=(8CY2[*Wi`NB}^(< "\g.<"^CU|( n&*Wn *W!V^*YR V^*[R(!Y`́͜ʹͻ*^NV^ [UP4F>~ 2ɯw: >+(=l!  / !!FNͨ}< 2GOC+Y͞< [~BKC +͞< V ^ ! R<<:<0s!>2 !0 (): =2 K C +͞ 4> 2 !/(FNr s ! 4h~# !o V ! V V ^ ~$O}#Hard disk drive #1 not available for MP/M$Bad sector table full. Re-assemble XIOS$:7~~w:>~w2G濰~wV^fn+S">2~!:G !5 >8!6(:(yϿ/h4/PP 4X JG :     $@a C5 ! !  >` >> Ϗ7^`7!#^#V+V+^ ^#V" #### ## ß >/!p}!}/>)_:j{ _:{ />_:{ />_:j{ >)_:{ _:>{ ->_:{ _:>{ ->v AA)_:j{ _:{ _:>{ -_:{ /* ~### 6~(!N#F#^q#Vps#r V#^#QY~( NSN/(((!- S! S!( S!# S bwBNKBDOS SPRQBNKXDOS SPRBNKXIOS SPR<SPOOL BRSTMP SPR MPM SYSj ABORT RSP MPMSTAT RSPSCHED RSPSPOOL RSPMPMSTAT BRS!SCHED BRS DISKDEF LIB3SPOOL PRLABORT PRLASM PRLJsCONSOLE PRLDIR PRLDSKRESETPRLDUMP PRLED PRLD !Z80 DOCF"rsERA PRL#ERAQ PRL$MPMSTAT PRL!%&PIP PRLM'()PRINTER PRL*PRLCOM PRL+RDT PRL2,-REN PRL.SCHED PRL/SDIR PRL 01234sSET PRL<56SHOW PRL<78RESBDOS SPR9STAT PRLN:;<STOPSPLRPRL=SUBMIT PRL*>?TOD PRL@TYPE PRL AUSER PRLBDDT COM*CDGENHEX COMEGENMOD COM FGENSYS COMJGHILOAD COMJMPMLDR COM-KLLINK COMzMNOPuLIB COM8QRRMAC COMjSTUVXREF COMyWXYZI8085 LIB[Z80 LIB/\]INTER LIB^TREADLESLIB_BUTTONS LIB`SIMPIO LIBaSEQIO LIBRbcdSTACK LIB eDISKSTATPRLfDSTACK LIBPhijCOMPARE LIB kNCOMPARELIB lWHEN LIBm .oDOWHILE LIBnSELECT LIB oDISK DOC pMPMSETUPDIA gqLDRBIOS ASM@tuBOOT ASMvDEBLOCK ASMPwxyTODCNV ASM~z{|}RESXIOS ASM~DUMP ASM$EXTRN ASMXDOS SPROSYSTEM DATXDOS SPROSETUP HEXU *U#~i###Q* .~2"#~2"#^#V#^#V"" T] s#rz=w+w!!~6UT"r! ^#V",!DM$##~2Z!~2?#!!T!w!~2j!#~w2k!!!T!w"@{2R!!"B"!"!"!9"=! y 2 KB3!!_^#V*@!MV\en -6?H)<=ELc}<<< ( > !Û!'Û!3Û!.TV`:Z!A2 ]]: 0!d61#d p#:w#6 !6:!6 *@#!6.#`]fc2BPP`."Btcx!|:!:K!¼  T~{_zW{_zW )ÒͲ4#4#4ͭͲd!ͭè# ú w#>2n!:Z!O#|^#V#".!##"0!##"2!###"4!#"L!!6!*6!!!O͑*!}o|g͈!a!s#r#p*0!N#F*2!^#V#F*a!:c!O}|y*o+"!*!"!!x!!!!F  *@! !"@T m "@:! r#~?w#r# 0 ̀ w2W!2^!ͺ~O  j͢ :B<>w##4~?Sx d C:N!2Q!ͳ>2N!2!:`!!\!ڭ‹:`!7 :B7Xe¿‹7k͝F:l!:!ͳ !B4> 96~2\!2!<w>?*2!s#r#pyOxG*L!0#MD!#!>!N:`! "G>O:]! 90*@; :Y!Rn& ^#VOC"a!*a!}:>!O*a!͑"a!2c!"g!:?!O:`!!a!w*@~zWw# ˜zͺ#~*@!*@ *@!~2`!~2\!ͺ:@!2]!:Q!O:`!w:\!w |g}o* # !k!~###ƻ*@ ####Gͬ//wɯ2!ͬ4:l!`c*@w2V•:k!ʕ2!ͳ !B4ʕ6> 9>2! )ã:Z!O!͢yoxg*!!:Z!O}!!!N#Fͩ"!!*C!#*.!s#rI ~ͼD* :!2Q!>2N!:m!>…:l!@>…*@ͳ:`!: :B>2!XehbkO:j!Gͫyü<¸?2S!ʂO CDM? }>9͜"a!*@ :Y!:S!ʮsöO s#rkW:Q!==y==* Ww#͙*g!"a!͝O*a!:?!G#2a!͓͝:`!G!?!Ox!\!5w43:?!G/O~=w PP:\!w͢ @_~@w2Q!*@!!~~#~O~#G~.|! wͭ!x?! ~ q O͓ k ͢ .:B< x ! q##~@wC :B<. ͜ . o$*@~6ͺ~ww*!*.!{#z#r+s{ozg*a!*G!|g9*8!*a! z u#ͼ{tw@͙OÓ͙F!,!Ü! N#F$###>w#w;ͭ> 9!!~#> >p&0 ~*4!w:O!9p͜9͜͢}2Bb}bN! ~态O>G~G!~G~o>Ͳr#r#r d ʖ+_y#x#{ڋs+p+qm >2Bl +!!q#p#w!Z!~s2Z!>2K!2K!:Z!!n!*#!Ϳ_N}*%!Ϳ2+!*#!MDͩ"#!!H!~>*%!MDͩ"%!>2+!G=O*@~2m!~w#~w>`M>2l!~^~p2W!>2!*@~=2R!ʅ:Z!2[!~2!w:?*@w͚Ÿ*4!~E=Į>Å#FxT]## #~ ȷʻ ʻ * #  <<úT ~<~:@!/GyOA +'  :Y!x0 o&:>!W>OE:@! ͺN/*@"U!>2O!!T!qT $!!wg ͽ@ *U!ʓ #@ :T!O~̋ 2X!~ :!m 2X! y ? x  = M  *x!$ *!"x!*!"z!N G:!<ʁ 2!=2P!xm # :X!/ :!̈ m 2O!:!2BG?͋ >G9xm ~m :!m 2!g  x!!|!O~q#r ɰm ͓ *!$Ÿ *!"!*!"!>2!>2!:! ͣ *U!~w Z m ͍2i!Ͳ͡  d 6 x¨:i! *@ͷ    $&o!  * ~) )33G# 8w ;#*@~w \d _m >2B*@p! ~* " 0*@w#  6#Ýj=Įè͚E=ĮGû͘  *z!|:>!O*x!)!x!:?!2o!:>!#~{_"p!!",!",*t!"v!^#V}cj##n!~Oex=hH#ͺh++"v!/<[++"t!^#V*v!"t!s#r*"""s#r*"}"t!^#V""*v!^#Vs#r+*v!s#r##Gn!w#w#w>2y!>22!!x!##+"Z"++R m :i!6  d 6 ~6&|m  ͬ  PYyR m *A!{zu BKm A <yA !͗ ʤ ~Gw#Ä *@ g|*@ͷ > Å? #x » *@~ w"ͪ ͑͡ "U!ͭ  Z g ƒͬ  ͡  d  ~ m  ͬ   " d  ͗ ͤ m - d _++V*@ ! Ns++r!ʀ > >Fwx2W!~#+w#w+:W!ʠ wɯ2B2!ͼ͜ͺ~2_!  Nͺ:_!wk  Fw< ~ 6͓ d  *@ U"":k! 2k!T3 w*t!*v!PY!""t!)L2-##~w2!-"v!"t!!""t!)##~[++n[!!~4!""t!)n^#V!3~~w*r!ͺ:k!2k!Á*r!!""t!:Q!G)2###>2O!n"!##~@.*v!*!!""t!))2n"v!*! ~#f=|͋:i!Ͳɯ2!*r!!""t!){2^:!<2!^!":!ɯ2!!""t!)2:!<2!Í:j!_!""t!)zڴ>9'f* ^#V##~G:n!Yx@Y++"!:N!<͂:!>=)2n!:O!:k! 2n!ͺ '͌">2Q!f>2N!2N!{F F 2j!WT2 rT tw#tw~ͩ*:!^ʗҏË+}Š*A!#}o|g:>!O͑* s#r#w!Z$#Ó *@6 x d >2!͜ ͂j͈ͩw*4!wʤ x pxä ͚ͩ9 ͪ E>9*@  ͪ x Ef ͚>92! d ͜ ͂ͥͺ~z ʤ ‚ >w ͘ ͓ 6͘ W < * .2K!!"B:!!:!<:m! *@wͺ:l!` >w:W!!?!G:j!G:"> 9ͨͤ!^:j!b:N!<+ͫ=6͙ʹ:j!b:N! 9ʹ!9"!>2!b2!*B}šʹ""ʚʹ"Úɯ2!*!:j!gG"B#!Ú#͋Ͳ*!r+s#n)r!úa!!o!!!x!# g ͑ !""t!g g )###o!#}o|g:n!O!͢}/_|/W!")!2!*@*"|:n!}ڢ||2n!*)!*'!}o|g"'!x͕"*%!*!!:n!G:!ͤ"!""t!):!*)!DM:n!ͬ")!*@L"@!w*@6:!!w:[!2Z!*=*B}DG*r!~!i!~+"6 GU"+"U" x2N!~a"R6I"!:l!:i! G+" xʅé+"f2n!*'!:n!Ѳ2!hXe!k=2!!)R#:i!4nn͍2i!}2n!xA!N#FtTzTV\]Oc:cx] ~0Oc]Z!"B Disk reset denied, Drive Console Program !0!"@aʤKó!"!!"#!"%!"'!2Z!=2n!f2j:l!` $À*@:?wIͪ ͍<@2l!GG>2i!xc:?c>2!<2!2}!C ͔!!w:!g  >`2l!*@6T m H ͔ͽ:l!`ʸ*@#~> 2i!*@ ~2l!F I͚EOxͮy@̨>2m!6$$  HA$A !$ I UUTI"BH!H$$H@ "@$@ BB H@BH!@ @ I@ D$AD DDABHA"!B H$I$BD$ I@  D"HHI$H$ $ B  $$"I$H$$A$"BBBI$"$D$I H"I! H@$BD "$" $$I$I $@@!BI$HI$I$I!  $HA D @B@ $@II$HHA!HII$$DI $$$$I$@!$HII$@A$!BHD$"$ D"(*"}> ÅP"> Å?d##:i!RW*v!"t!) 4d#4d>Å++RE:i!@wͲt!͜:N!͚@ͽͼä '͍2i!!>2j¿͢ >">2!ͳ :B<ͺ:i! +" N#F p+q f"n *!@͚ Eä ~?2Fͺ~?A m d "U!#  '͌"x'͌"͍2i!2P!'Iͪ x C Iͽƒ:i!¤>G":y!<ʹ*"}##:N!R++:N!R:P!͚Eͩ͜ Iͽ "@I$!D@$D@!$"A@A$D"DI"@$ " $B! @ H! HBB$@!!!A @H$"BDH" !$BH$A$ $$$H $ D$ $A$!$"I!$D"D@!I I$H$@"$II "$D@@HBHI A$I"""H$BI$I BA"$A! I"A I$D" IBHHBBHA$ BBA !I$DHH$HI$$I$BDI$$$"II $I!DHI @I$$$I$D$@$I$DH""D"H$$$H@""!$$$I$͚^E+͚^>2!͜ 2d  F :P!^͂͜:i!@[*  Q>jw p͍:N!2i!@2l!:y!O2CF t yo&)!^#VÛ  *#!:Z!9*@T s#r",!Óͷ*:!>2!:Z!O!͢n*!!ͪ ͑! ͷ*6!"B:R!:?92?T ~w'͌"'͌""'ͪ ^a*@}/_|/*#!W}_*!!"#!E"!!*%!E"%!*#!:n!>2n!!o!>w#w#w) “2j!=ͧͨP*@:n!>=)2n!2n!?*"|ȯ2O!<2Q!*@|<2Q!ͺ:n $HI$IDAA $BD"$@ ! $ A"@DH@ DXe!ʚkɯ2!*!:j!gG"B#!Ú#͋Ͳ*!r+s#n)!r!úa!!o!!!x!# g ͑ !""t!g g )###o!#}o|g:n!O!͢}/_|/W!")!2!*@*"|:n!}||2n!*)!*'!}o|g"'!a{j_ } }q81HDB$ "$ A!$(@>2n!xA!N#FtTzTV\]Oc:cx] ~0Oc]Z!"B Disk reset denied, Drive Console Program !0*#!"@aʤKó!"!!"#!"%!"'!2Z!=2n!f2j:l!` $À*@:?wIͪ ͍<@2l!GG>2i!xc:?c>2!<2!2}!C ͔!!w:!g  >`2l!*@6T m H ͔ͽ:l!`ʸ*@#~> 2i!*@ ~2l!F I͚EOxͮy@̨>2m!$$  HA$A !$ I UUTI"BH!H$$H@ "@$@ BB H@BH!@ @ I@ D$AD DDABHA"!B H$I$BD$ I@  D"HHI$H$ $ B  $$"I$H$$A$"BBBI$"$D$I H"I! H@$BD "$" $$I$I $@@!BI$HI$I$I!  $HA D @B@ $@II$HHA!HII$$DI $$$$I$@!$HII$@A$!BHD$"$ D^(*"}> ÅP"> Å?d##:i!RW*v!"t!) 4d#4d>Å++RE:i!@wͲt!͜:N!͚@ͽͼä '͍2i!!>2j¿͢ >Å>2!ͳ :B<ͺ:i! ~w#~w+ "!nI *!@͚ Eä ~?2Fͺ~?A m d "U!#  'fx'f͍2i!2P!'Iͪ x C Iͽƒ:i!¤>2N!:y!<ʹ*"}##:N!R++:N!R:P!͚Eͩ͜ IͽR"@I$!D@$D@!$"A@A$D"DI"@$ " $B! @ H! HBB$@!!!A @HBBDH" !$BH$A$ $$$H $ D$ $A$!$"I!$D"D@!I I$H$@"$II "$D@@HBHI I$I"""H$BI$I BA"$A! I"A I$D" IBHHBBHA$ BBA DI$DHH$HI$$I$BDI$$$"II $I!DHI @I$$$I$D$@$I$DH""D"H$$$H@""!$$$I$͚^E+͚^>2!͜ 2d  F :P!^͂͜:i!@[*  Q>jw p͍:N!2i!@2l!:y!O2CF t yo&)!^#VÛ  *#!:Z!9*@T s#r",!Óͷ*:!>2!:Z!O!͢n*!!ͪ ͑! ͷ*6!"B:R!:?92?T ~w'f'f"'ͪ ^a*@}/_|/*#!W}_*!!"#!E"!!*%!E"%!*#!:n!>2n!!o!>w#w#w) “2j!=ͧͨP*@:n!>=)2n!2n!?*"|ȯ2O!<2Q!*@|<2Q!ͺ:n V3$HI$IDAA $BD"$,!`i^#V#~#foq/NywG:|xA~ 2(ww:( >ί~ݾ>~w:(>~w2)G濰~wS2"4!-:)G Ox東ȯ!+5 6!*5 ES@"B!;:)G>!+5 6!*5  *> ñl>2+>2*~ ?ݶ 8͎͎͎:(yϿ(yχ~ݾ www> >ί""fn}!|! N(V ^ V^{"z"Rrs>>< N(~~w N(~~w!>2E>2K!N"Ll ST"V>2E>2K!\"Ll "bSd#>>2D>2C WxͶ ?ݶ KJ*L:EG>x@( Ͷ N ͞ N :E>(<!D5 6!C5  ñf n F%I <V H <V KFCF  !F ɯGOVVVVx =y~( G#O#Gxy͎͎#͎:h y!χh y!χNV^fn+ ( p!~w"~w#~w$~w%44> fnRtu44~wɯww~w~w~wɯ>(l/ͼV""fk</(~  ==l!/ͼ  / !FNͨ}H 2GOC+Y͞H [~BKC +͞H V ^ !R<<:<0s!>2 !< (): =2 K~JÂÕ$ÚÚÐ +YÞÍkstzmÊï >r- :8>! N84! N#FFNF(""fnN!*~  fnfn S C +͞ 4> 2 !/(FNr s ! 4t~# !{ b ! b V ^ ~$O#Hard disk drive #1 not available for MP/M$Bad sector table full. Re-assemble XIOS$8 !f !`  >` >>l Ϗ7^`7!#^#V+V+^ ^#V"j #### a ##a >/!p}!}/>)_: { _:}{ />_:}{ />_: { >)_:A{ _:{ ->_:A{ _:{ -Pf n*fn *N~S}2*i`NB}^(< "g.<"C!B|( n&*n >!B0 = {/_z/Wv*V( \͡!" ( ͡"y2v*V(\Ͷ(:0͡>" :(!N!^B F( Ͷ *tu!w :w ! 8*tu:w2!>":!.:ݾ "V^*R($ = [:co" !>*>V^*R V^*R .R > >( >0 )_: { _:A{ _:{ -_:}{ /*j ~### 6~(!N#F#^q#Vps#r V#^#QY~( /(((! ! ! ! ! s1!ås1!Es1!s1:(͎!5+~w#w͎:>2ɯ2?? :JWx /42:RYpXP 2` _ P p/ $,D  l V ~  N>(yM=wnf~N y#~ ~ nfut n(~ݾ 0 ^͎;N @ ^( Mnf~(~ ~  FM>y Mxw#~ ~ nfut4u X  ? B +bN 0b- - /?i&)))*.F####~8Oy8!jˆ!v6? 3!vwx? !6o*.~G */  [!/* "|( _x= >2"wsr@7 f M ^͎;N>y@X  È V(U F K~(E=wnf~ y #~ ~ nfut n(~ݾ 0 ^͎ ~ Mx  M M~! ~nff>Nyx>~! 7~ ^͏nfN#~ ~ nfut5yͧ ^ ͏N x~! ~>>>Nyx >=~! ^~  ~ yN y nf~(~ ~  ^͏q#~ ~ nfut4 ^ ͏yN y>Nyx >ȯͺ ^ ͏yN yNy!!8!>>ɯ: ͎>2 2 6\ \ \ 6s1 G(>#2s1(%2͎>2 2 9: 2{ËM^{Ë^{~O>8y: 2s1!ås1!Es1!s1!\ås1!\Es1!\s1! ås1! Es1 i:   *}2D" * * *&"!q:UY: Y:ҩ: ʩ:_2ʘ:€!6<:<2!ژ!6 >!]Ҥ; !6:Q::H: !6*M : !6@!HBDHBQH  A$@@HI"I$DBH$HA"! HH$"I  B@I"B N dSpool 1<v!p+q!6>!*&*~2=y: :O>H2y_!6 !6:!ڼ: z!4: ª!6nª!"*&y*&!4d!4>!p+q>~!"!s:4**' Ͱw>  O  _Y![ Ͱ~Q #! Ͱ~ķy!{ Ͱ4 5~yk 5 6y҂ ^+ @Oy +  +  ˆ ͞  #+ ;  !k Ͱ + ë  +  + O $O͂  !k Ͱw`iN#   ! x  ![ Ͱwô 1 x ~+ F ; !k Ͱw … : … ! Ͱ>wn 6 . 6 £ !k Ͱ~!{ Ͱ 5͖ Ë ¯ ͣ  ͣ x #Nq ü ![ Ͱ~ !{ Ͱ![ Ͱw͖ ![ Ͱ5 #wOq82$*#"(21>%1!"*+!3m**DM`*":{*##"<4"f"h*f"l"n*f*l>h*< :pw*< :qw!q">%H*#"":2!6'>%+N#F [H*#"!"":D!6>%+N#F ]H!"!"ü*~qZ x p + !{ Ͱ~ Printer Busy. Abort (Y/N) ? Attach: Terminate Submit ?+F Fʍ $A!I$ A!! $D!BH "  @@@! !BHH@$@ $A "@!D"D$A$@"I$"I@@e@@$HHH"@H@A$I$!$$D $@BUUU!$HA I$ @@@ $A>#foDM!>)) = i`N#Fogo&og_{_z#Ww*!p **DM͆ 2yʭ :yʗ ͯ *"*6:2x÷ "!x4d !"/ !j}=2| !"*M^'_ !z6:|!z1 * "}*}DM͆ ' ͯ *"!z4 :e !"͆ !z6:|!z '? 2*H#"H!{6:{ր!Ң *{& :{4 2!{4m *":ڹ ͯ !z4I '2!"!q: !4>!S :S! :2*M &cHHB$ HB$!!@$HH!I  !$$!!$ "H $$A DBD!"HI$$ A#(."us#rjjYjYjMXDisk 4MXList Ly,}!}"q2p-n&M)))6#|s#r>2!"E4NP!"\"f^#V COPYRIGHT (C) 1981, DIGITAL RESEARCH jFO"n.~W."?.". s#r#*ns#r#\þÊÍ*nL.~s#r.~#fo"l"ja.~_! ^#V͎ * :w*#" = = = = = ͯ  *M !6q  !6q  !6q  *& !6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 : = F P [ f q  :2!q: " *M n :c4 *M n :2!c:Q !c:2: !:cw>!n !5 Y : { !6!q:!lwҙ  â :0O !q:O| :O| !6:]2l:o'2o:n'2n:m'2m*mMͣ *nMͣ *oMͣ :]  a*li $$$ SUBDisk error during submit file read. $ Start up command: $*.^#V"!I9*^#V!"^#V!~!9w!{~2!"=6Kw+w!9~!9w#. -¾s!9*. Vc !9. ->0!9!Cs#r+"D~#fod!^#Vz/! ~_#!~#~+͡~#p+q*D`is#r+"D!PYDM͡!~O#~G +w . #Ò-  O-~’*@DM! ~!o|g~V#~Vr+s!O s#r!o N#F+xʈ{‹z‹ w# w*Db! ~_#!O~#~+͆ʭ~#»p+q*D`is#r+"D!oPYDM͆!o~O#~G +w #w*D| }`i"D##6*L!###>+ =z:2~W#U*&)) ~#~#>w#~*@ :w >:_!#### ### ##>w!9w 6P!9 !96dK=v*~!9. ->0!9!9w!9<=6v!9# !9w=  % KV+^s#rS!9!_A_!9N!9 6 *N#F! ~!9w*N#F! ~!9T]!9Kf+6q=>rw+w*Ds#r+"D##6q! ~<>:_!####>++ ##>w+~#~#~*@ :w ¶ >:_!#! ~#fo!!^#V{z >:Gy;>Y!^#V>.r=n!Û _ W#~! N#F!N#Fy#x#p+qG!~MG#~XG*@DM!q#p!N#F p+qBK͘!^#V{ʲ+w#w+{T]##s#r w# w ^#Vo >! ^#Vz +w#wD _ W g GL! ~Y+~Y!~#ʳ! ~*!N#F! = ~! w#w#w#w*J`is#r+"J *Jz>4!. N^#V*#-@s#r! ~###’!J}ʒ~‹#~+‹  MP/M-80Inn;59w# x*@~w<%=!O>G÷÷!91424^#V:4MXProc  0δ{ < 7COPYRIGHT (C) 1981, DIGITAL RESEARCH @ 2!"2"* ÷8*1^#V"7#N#fi"9!"!"PA!W|#|+}_|W*7"5`*9*͜:.;s#r!.w#=#^#V"##^#V#!3~#^!>þxw8#s#r* .~ PYÜPYÜPYÜ ÜPYÜ0ÜYÜYÜÜÜ $_͜PY ÜPY Ü  #w*D| }`i"D##66 ɶȥ- :ʹ8>! N84! N#FFNF("ɷ"ŷfnN!*ɷ~  fnfnÂÕ$ÚÚشÐ +YÞϵÍkstzmÊï >Ȕr;w,}D2yS"z:yS*ww#ï!"(*l*l~#fo2:y>o>g~SS:ySOB!|!X[yiXkX$0X! ~X!Xͨ[*u*wͮ**zN~wʇ#####~^#V!ydڙ!s ~Gڹگ!*uͮ!|$ͮ|y)~=!~#͋xx>o>g{s#r4-dwmw/# ~U+~w+++++~wN!9"1y~s#rÍFFʍ!Ͱ~[xp +!{Ͱ~ Printer Busy. Abort (Y/N) ? Attach: Terminate Submit ?£!kͰ~!{Ͱ5͖˯ͣͣx#Nqü![Ͱ~!{Ͱ![Ͱw͖![Ͱ5#wOq  !x![Ͱwô1x~+F;!kͰw…:…!Ͱ>wn6.6S"s*l~#fo>o>g~0*no~#fo"*s*q:p*l~#fo>o>g~>o>g~<ͳ==P*nozC^#V!9!WXy #(."us#rjjYjYjMXDisk 4MXList Ly,}!}"q2p-n&M)))6#|s#r>2!"E4NP!"\"f^#V COPYRIGHT (C) 1981, DIGITAL RESEARCH jFO"n.~W."?.". s#r#*ns#r#\þÊðù*nL.~s#r.~#fo"l"ja.~@Oy + +ˆ͞ #+;!kͰ +ë + + O $O͂!kͰw`iN#Ͱw> O  _Y![Ͱ~Q#!Ͱ~ķy!{Ͱ4 5~yk5 6y҂^+<͙   N#Ÿ*n.Ͱ~F 6 ~+~w##~<*͙3 !  ͺ!Ͱ%~6IʳG2G®*n.Ͱ~>!Ͱ~q{з  x$$ $  vATTACH  hATTACH  Tick  &Clock /   $$s######~w###~wF́zo>g~ GxyO ́!Ͱ~6'O͂ɯó́Foo ~!~RW!~*l O ~#k~u~+us#rÄ^#V" óÂ{{ .{y<<< ѷoo!Ͱ~6 o!|!*l _f.\#pw# "6 ~w ~} ~|cli yKB!_ }"*CliQ B ((l : 8MXDisk MXList 'k̀{*u͋:!"Ll*"=™6͇>"2:L:!l,=!**u!O# ![w?ʍc:O|͋:z*"s#r*"*6*z:g"z:!ԇF4#4#4̀î$&$$&&$$$$&&@&^#V"w2"~2!"z*_:y<ͳ,!9?}o+V+^~<++~:ySwG3 )*Idle ?j} o|g~#fo +|’! ~#~r+s͘*@##6!"F _ W! ~+~!!~#¹ >!Û _ W#~! N#F!N#Fy#x#p+qG!~MG#~XG*@DM!q#p!N#F p+qBK͘!^#V{ʲ+w#w+{T]##s#r w# w ^#Vo >! ^#Vz +w#wD _ W g GL! ~Y+~Y!~#ʳ! ~*!N#F! = ~! w#w#w#w*J`is#r+"J *Jz>4!. N^#V*#-@s#r! ~###’!J}ʒ~‹#~+‹  MP/M-80nn;59w# x*@~w<%=!O>G÷÷!91424^#V:4MXProc "*Ø"**! ~+~! w#¿! w#wT]#s#r#T]s#r! N#F#~#fo+|bk s#r]~#fo!N}| *Ds#r+"DPY*D|S^#V"D#6++@1*@ ~l߇!_DM*@ ^#V"2*@{*D*s#r+"DPY@Â:* w*DM͞*DMͽÂ}ޓ޴ޛޡ޿F*F|1BKTͤ4s*$4* ~4!采_DM[*DḾ͊!L^#V{Xz_!K+ ~#~ *##6Â2!"2"* ÷8*1^#V"7#N#fi"9!"!"PA!W|#|+}_|W*7"5`*9*͜:.;s#r!.w#=#^#V"##^#V#!3~#^!>þxw8#s#r* .~ʎx:<}[PYÜPYÜPYÜ ÜPYÜ0ÜYÜYÜÜÜ $_͜PY ÜPY Ü  #w*D| }`i"D##6xG* {~!w*@DM>͵* `~*6vOe~wyO[~v~`w*x2Ò>2**@"DM####s#r1+++~++^#V"@_!^#V*`iBK! s#r*F*s#r+"F!q#pqogogDM o g,###+++}|z {"*@##6 *"":`**!9""*@2***"!B"^#V"+~#!ʮ**N#F+*q#p+s#r*"* s#r*~#*+s#r*"*^#VÇɮ[Kx$]akpuّ ڕۚ۟۰&oDM o g}U|U~#~7#"*B|!Cs#r+"D~#fod!^#Vz/! ~_#!~#~+͡~#p+q*D`is#r+"D!PYDM͡!~O#~G +w . #Ò-  O-~’*@DM! ~!o|g~V#~Vr+s!O s#r!o N#F+xʈ{‹z‹ w# w*Db! ~_#!O~#~+͆ʭ~#»p+q*D`is#r+"D!oPYDM͆!o~O#~G +w #w*D| }`i"D##6*L!###>+ =z:2~W#U*&)) ~#~#>w#~*@ :w >:_!#### ### ##>w q#p#s#r÷6 6yO! ~w*@!~!*@!~!OO ~#~~+s#r>=*a ~FW:O !# {#z6+6BWHW.,o-W6.,-WK*Ds#r+"D###6#^#Vr+s####~w*+++~w+++++w+wb*@{¨z¨##6Z!N! ~#fo$*00EfJ o g DMWW.-*@ _ W o g""f*L!. #EEV-3 G~f!^#Vz+>! ~!~ʖ+w++6q=>rw+w*Ds#r+"D##6q! ~<>:_!####>++ ##>w+~#~#~*@ :w ¶ >:_!#! ~#fo!!^#V{z >:Gy;>Y!^#V>.r=n~<'w`w+~<'w$w*;#"; Attach failed.$x͖͖*@ :Z`ABORT ABORT  yb8Abort failed.$b:92!: ~ # ¶#~+6 # 2B!"86, ß*͠"{#|ʰ!n6:hª:N2>Xԫöͷ*B|!N#F p+qxz!~#^#V"B*D͜¶>2!~,#~2#T]~#, *~g*~#0O0O:\ 9:22!"!N"OͰ*{|ʭ*{{!G>OͰò!6 ot>* !{"!"!^#V##"*ͨ͹!~w:22:< ͜:<*~*~|!\@PHI! A!$02nxA!N#FtTzTV\]Oc:cx] ~0Oc]Z!"B Disk reset denied, Drive Console||2n*)*'}o|g"'2:ͮ^!:Ͱ!W~ R!T~w!W6P#6R#6L͐ !T~w!W6C#6O#6M͐:}ͮ:}4ë-x>2N͢u*;"|GWx_}_ |*> <2~N͢u}4>xQ O! ~ž#~žr+s>2÷}[>2x!~w#ë:<=!o>g~w++~#:2F4ӯ2:ͮN͢=5è*DM"ͮN͢Gͻ¨{:ܶ2P*Ͱ*P:w*{| ͻ*!~O!O s#rXe!ʚkɯ2*:jgG"B#!Ú#͋Ͳ*r+s#n)!rúa!oG:jG:> 9ͨͤ!^:jb:N<+ͫ=6͙ʹ:jb:N 9ʹ!9">2b2ә*B}šɯ2!"t)2:<2Í:j_!"t)Ūzڴ>9'fˢ* ^#V##~G:nYx@Y++":N<͂:*v*!"t))2n"v* ~#f=|͋:iͲɯ2*r!"t){2^:<2^!:!ʎ:!4< =›"F*""* ~!< =q#p++*r+s+6:~W*"**{z#r#OͰ!~#~:}g."? s#r#:w*~ʑ:NG:<@O: !Oxf.~O#W:Vˆ:!:"͠#|l*:ͰT* Rw#w#w:}G**~~w#yO#z*w#w#w#6:!< =#s6#*s#r*{{!G>* N#fi#OͰ#~0p#"\*"͠"{#|* *Q ͫ*{||*6#6 #"  )n^#V!3~~w*rͺ:k2kÁ*r!"t:QG)2ĩ###>2Onĩ"##~@.Rn:k 2kT3 w*t*vPY!"t)L2-##~w2-"v"t!"t)##~[++n[!~4!"t"s#r*}"t^#V"*v^#Vs#r+*vs#r##Gnw#ėw#w>2y>2٨2!xė##~R++°2o:>#~{_"p!,!,*t"v^#V}cj##n~Oex=hH#ͺh++"v/<[++"t^#V*v"ts#r*Aad entry$Chain COM to PRL$Msg Qued $ (User 0)$xwa{_w# ð*+++"6#q#p*|6#q#p##:w*  Prg ld err$Cli abort$Abs TPA not free$Reloc seg not free$Bad PRL hdr rec$Blnk file type rqd$Queue full$BO!Ð!"524µµ!*5! :4:4<Ôww* :ƀo6 6#  G Gq#p*$"*!@"ͷò÷(8*Jz!~Mz#~Xz!~#z#~z#~z"22^#VB  0*@w# ė 6#Ýj=Įè͚E=ĮGûҧ͘ ė*z|:>O*x)!x:?~&o  * ~) )33G# 8w ;#*@~w \d_m>2B*@p! ~* " wĥ:?*@w͚Ÿ*4~E=Į>Å#FxɦT]## #~ ȷʻ ʻ * # Ӧ <<úT ~>*%MDͩ"%>2+G=O*@~2m~w#~w>`M>2l™~^~p2W>2*@~=2Rʅ:Z2[~2*Uʓ#@:TO~̋2X~:m2Xy?x  =M*x$*"x*"zN:@/GyOʙA +' :Yx0o&:>W>OE:@ͺN/*@"U>2O!TqTƛ$!wg͛ͽ@'Ϳʙ*'L"'2h^DM*:6# x¡*4w*E*:s#r$*.6#6ƛ͛ͽ>Ɯ> >p&0Ɯ ~*4w:O9<_W`iDM*: ~w :YCNI N#FyX*A}|#0*A#$ƛ͛:ͽn*r#{ڋs+p+qm>2Bl +!!q#p#w!Z~sĥ2Z>2Kĥ2K:Z!n*#Ϳ_ΗN}*%Ϳ2+*#MDͩ"#!H~>͜9͜͢}2Bb}bN! ~态O>G~G!~G~o>Ͳr#r#r dʖ+_y#xG~.|! wͭĤ!x?Ĥ! ~ĤqO͓k͢.:B< xǨ! q##~@wC:B<. ͜. ͝:`G!?Ox!\5w4ˢ3:?G/O~=w PˢP:\™w͢ݢ@_~@w꙯2Q*@!!~~#~O~#@͙OÓ͙F!,Ü! N#F$##>w#w;ͭ> 9!~# 9>2 )ã:ZO!͢yoxg*!:ZO}!!N#Fͩ"!*C#*.s#rI ~ͼD* :w |g}o* # !k~###ƻ*@ ####Gͬ//wɯ2ͬ4:l`c*@w2V•:kʕǨ2EDM?}>9͜"a*@ :Y:SʮsöO s#rkW:Q==y==* Ww#ң͙*g"a͝O*a:?G#2a͓2Q>2N:m>…:l@>…*@ͳә:`::B>2XehˢbkO:jGͫyü<¸Ѣ?2SʂO C>2N2ә:`!\ڭѢ‹:`7:B7Xe¿Ѣ‹7k͝F:lˢ:ͳ!B4> 96™~2\2<w>j͢:B<>w##4~?SxǨdC:N2Qͳk?O:`!aw*@~zWw# ˜zͺ#~*@!*@ *@™!ʙ~2`~2\ͺ:@2]ʙ:QO:`w:\*2s#r#pyOxG*L0MD!!>N:` "G>O:] 90*@; :YRn& ^#VOC"a*a}:>O*a͑"a2c"g:*}o|g͈!as#r#p*0N#F*2^#V#F*a:cO}|yʘ*<+ó*<͈}|y#ʘ*<*IDM*0s#rї*6!<ė*A|!Y66:Z2n<*0w#w*2w#w#w!"!a^#V#F='Z=:+O*GPP*|ʀ:?_W:>O͑>o+"*"!xė!F*@! "@Tm"@: r#~?w#r# ֡0 ̀w2W2^ͺ~O  :Y~w~p4ͅͅp#p #  Fw XXw~: ~wä͢!B5!"*x2W~#+w#w+:Wʠwɯ2B2ͼ͜ͺ~2_Ҡ Nͺ:_wkFw<~6͓d *@ը ~mͬƟ͍ dը ͗ėͤm-d_++V*@ ė! Ns++r!ʀ>>Fw y_zW{_zW )ÒͲ4#4#4ͭėͲdͭè# ú w#ŗ>2n:ZO|^#V#".##"0##"2###"4#"L!6Bdos Err On : Bad SectorSelectFile R/O>2BPP`."Btcx!|::K¼ƴ T~{ord ErrorFile Already ExistsIllegal ? in FCBOpen File Limit ExceededNo Room in System Lock ListBdos Function: File: `]ufc ^#V",DM$#~2Z~2?#ė!Tw!~2j#~Ôw2kߔ!ėTw"@{2R!"B"""9"=!ƴyi###Qė* .~2#~2#^#V#^#V" T] s#rz=w+w!~6UT"r ڑ1 :_ A_ > !96dK=v*~!9. -΋>0!9!9w!9<=6v!9#9w 6P!90!9!a*li $$$ SUBDisk error during submit file read. $ Start up command: $*.^#V"!I9*^#V!}8HDB/'333333.;;33,;;#w/#6 'O O m.:;=,/[]<>a{j_ђ } }qݒ.ʑ'Õݒ#6—;ʫ'ïq/¾33ÿyy#q#p#w!!x/'#*6?ݒwݒ/ђ$*,T!`i^#V#~#foq/NyђwG:|xAђђ !d*&I :]>!4A>:<2O* :w:?†M!>))Ҏ =†i`N#Fogo&og_{_z#Wɼ :* ͇g~riyM]mق&څK!sK!s݇*|~#fo_ogDM!>))덑o|gy =gD;{ V+^s#rzfS!9!9gKw+w=6'f!9N* ~!9~# !9^##w !9^ !9~G#~;Ox´#~:´>_A_!9N!9 6 *N#F! ~!9w*N#F! ~!9T]!9Kf !9w=  % KV+^s#rS!9!JK!s* :w::"*^#V""^#V"*" *" *" *"*"*"*"4*"V*"*"w) *~›~r~r4*& *r[ 4*& *>O! | N ] !4K"))*NE~r*&)) *NE~r* ~W~r*&)) *NE*&)) *>z~r*&)D dSced +ͫ: 2%::ͭSched Eė!x# g͑!"tgg)###oė#}o|g:nO!͢}/_|/W!")2*@*|:n}ڢ ~=!م*&)* >ͫ҅m~r*& | N r~r*&)* ^#Vv~!4~w~r!6*~=!~r*&6*~=!h5~r*& | N :~r*&)*>ͫK>~ra*&)*>Tr!4I~r*~م!6*r*~!6*~=!*&)*>ͫ~r*& | N  ~r*&)*^#V~!4‘~r*~h!}r*~{!6*~=!{}r*& | N }r*&)*>ͫ^}rt*&)*>Tr!4}/;{ V+^s#rzfS!9!9gKw+w=6'f!9N* ~!9~# !9^##w !9^ !9~G#~;Ox´#~:´>_A_!9N!9 6 *N#F! ~!9w*N#F! ~!9T]!9Kf !9w=  % KV+^s#rS!9!ͫH * >ͫH* >ͫH[ * >Tr] !4*^#V"@:ͮ:  *ME!4*^#V":}r!6>͠!4~c: !6 *##r*##~M~=!؂*&)*͘т:  *ME}r*&)*^#V}!4}:}r!6* ~=!%*&)*L* >ͫ?I}r*##r] * ^#VM}*^#V"*^#VN}*^#Vc}:x}r!6* L>#H!", ð*P #"P ã*V DMV X DM&\z M.  -<!{ ", ðz [ðz oð*\& "\ "V *]M͖*^M͖*V DM>:]=:_:k==2*cMk=!d:cN_kH!g:dN_k:! 6*Z" * & ) * s#r> ʇ: <2 * ^#V" W*g& * & ) q#p: =2 .* & ) > ##DMd -d * & ) O!r*^#V">͠* >ͫՁ1}r*##r] * ^#V5}*^#V"Î:6}r*^#V">͠NEL|r*##NE* ~)o|r* ~Q|r* ~Q|r* ~e|r:*^#V }:} ^#V" `i+4 ڠ: !"6 * r* ~ހ[ * >O! | N ] !4m|r*NE1|r*"6!6> ͠:?HHW:<2O!# * s#r* ^#V" K:h!6:!*&#) * & )  N#F>áS!i:hN_k^!j:iN_ki!N:jN_kt!S:NN_k:T ! 6*V" * & ) * s#r> ʍ: <2 * ##" * ^#V" U*S& * & ) q#p: =2  .* & ) > DMo -o * & ) O! * & )  N#F>ç:U2  :S2 ! |O: 2 ! : N_k:]` : 2 !]: 2 ! : N_k!" !b 6:k=!b * DM!" *b &))l N`i DM*b &))l  N`i DM:` *b &))l  N1qSpol ^!w:<2:0}:SPOOLQ >!S!W6: z!]6:cm!c6:_z!_6l ::,: HHҰͯ : 2ó:ESTOPSPLR2v! r&:b <2b r ! : ! !:\ !", ð: *w ! 6!\" * #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6t * >2 !l"  * ~S*  ~YH * ~SHҿ . * DMz -· _og^#V))) DM!>)) = ^#V) O{ozgi`N#Fogo&og*w ! 6!\"· #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6??RSP??BRSMPM SYS G~SHҿ . * DMz -· _og^#V))) DM!>)) w@0 SPRBNKXDOS SPRTMP SPRLCKLSTS DATCONSOLE DAT --- $MP/M II Sys$Memseg Usr$ Bank $No break, CP/M debugger overlaid by MP/M$failed to read MPM.SYS$ MPMLDR error: $1, " #*\ "V !"Z *Z #"Z  z>V +s#rBKz w!", ð@*g& " \o͙a !*\ \ +|£9 1, *, DM!vv!. q*. & !0 p+q*/  = ^#V) O{ozgi`N#Fogo&og*w ! 6!\"· #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6??RSP??BRSMPM SYS ~SHҿ . * DMz -· _og^#V))) DM!>)) = ^#V) O{ozg "{2p!"9"12z2x!y%K!D _^#V       W[*MDy! ͻ ! õ ! õ ! ͻ o:A2  yy Bdos Err On : $B     !2 p+q*1  !4 p+q*3  !6 p+q*5    !7 q!9 6+60:7 dT!9 6+4+~dw=:9 g*8 M!8 60:7 ~!9 6+4+~ wg:9 Ҍ*8 M:7 0O!: q> !: ұ:: A Oú:: 0O!; q:; O͖:; O͖!= p+q  *< |Oͻ*< }OͻH!@ s+p+q!A 6:@ =!A ,*A &*> >O!A 4 !C p+q*B DM !I r+s+p+q+p+q*D DM-*F DM*H DM&!M s+q+p+q*J *L & *M & >!Q r+s+p+q!R 6#6:R <2R O*N :S <2S O*P ë>!R >P ad Sector$Select$File R/O$:!  2>:> :y!4 5~yU5 6y $ $:a $ $ $O[y [*MDy! ͻ ! õ ! õ ! ͻ oA^#V! ! ! !  w#:O|^#V#"M##"O##"Q##"j!S*U![*`|!w6/6>!hN#F*Ow#w*Qw#w'!N#F*Q^#V*O~#foyx*[{_zW+i*[yxڑ#*hDM*Os#r*Qs#ryOxG*j0MD!!]N:} G>O:| *ͮ :  * ME! 4* ^#V" :r! 6> ͠ ! 4~c: ! 6 * ##r* ##~M* ~XH * >ͫ H * >ͫ H* >ͫ H[ * >T r] ! 4* ^#V" @:r* ~{! 6* ~=! {r* & N r* &)* >ͫ ^rt* &)* >T r! 4r* ~! 6* ~=! * &)* >ͫ r* & N  r* &)* ^#V! 4‘r* ~h !C   Mpmstat 0123456789ABCDEF Top of memory = $FFH Number of consoles = $ Debugger breakpoint restart # = $ Stack is swapped on BDOS calls$ Memory is bank switched$ BDOS disk file management is bank switched$ Z80 complementary registers managed by  6* ~=! h 5r* & N :r* &)* >ͫ K >ra * &)* >T r! 4 Ir* ~ ! 6* ~=! * &)* >ͫ mr* & N rr* &)* ^#Vv! 4~ wr! 6* ~=! r* &))* NEr* &)) * NEr* ~W r* &)) * NE* &)) * >z r * &)) * ~› r r4* &  * r[ 4* &  * >O! N ] ! 4 K " }dispatcher$Ready Process(es):$Process(es) DQing:$ [Process(es) NQing:$ [Delayed Process(es):$Polling Process(es):$Process(es) Flag Waiting:$ - Flag(s) Set:$Queue(s):$Process(es) Attached to Consoles:$ [] - Unattached$ Process(es) Waiting for Consoles:$ [] - Process(es) Attached to Printers:$ [] - Unattached$ Process(es) Waiting for Printers:$ [] - Memory Allocation:$ Base = $00H Size = $00$H Bank = $H * Free *$H * Reserved *$H Allocated to $****** MP/M II V2.0 Status Displ " * ^#V" " ^#V" * "  * "  * "  * " * " * " * " 4* " V* " * " w* " T* " U* " * " * " * " *##" 4" " * K ! s >J  K ! s* : w::riyM]m& K ! sK ! s *~#fo_ogDM!>))덑o|gy =g DM!>))Ҏ =† i`N#Fogo&og_{_z#Wɼ!  :* ͇gqay ******$! q* &K ! p+q*  K ! p+q*  K   ! q: O! N * &!`  N ! r+s+q* : ‡: š* DM! 6: ! * >O * #" ! 4Ÿ!! r+s+p+q+q* : :* M* r* : !" 6!" 6! 6> ͠ : ?HHW: <2 O!# * s#r* ^#V" K : h! 6: ! * &# ) ^#V" `i+4 ڠ: !" 6 * r* ~[ * >O! N ] ! 4mr* NE1r*   :[ ͱ!N5!6:%:<2*6 * 6å!q!6> !d*&I :]>!4A>:<2O* :w:?†!6!q!6?!:ҠgÐ!q*&0  BBHH$H "$BB@@HB!"B$$ A@    $AHH@ ID A@ !! $$HAHBD$$  $A$@! HHBB@$$$$ I "BB!$ ! HD$ HHB$$$$BB$$B@BH!$NELr* ##NE* ~)or* ~Qr* ~Qr* ~er:* ^#V :r* ^#V" > ͠ * >ͫ 1r* ##r] * ^#V5* ^#V" Î:6r* ^#V" > ͠ L* >ͫ ?Ir* ##r] * ^#VM* ^#V" * ^#VN* ^#Vc:xr! 6* ~=! * &)* ͘ :  * MEr* &)* ^#V! 4}:r! 6* ~=! %* &)*  ,? A$ " " " "@$"DI$HDD@* " T* " U* " * " * " * " *##" 4" " * K ! s >J  K ! s* : w::riyM]m& K ! sK ! s *~#fo_ogDM!>))덑o|gy =g ;DM!>))Ҏ =† i`N#Fogo&og_{_z#Wɼ!  :* ͇g ͞ 4> 2 !/(FNr s ! 4h~# !o V ! V V ^ ~$O͋#Hard disk drive #1 not available for MP/M$Bad sector table full. Re-assemble XIOS$/ !H !B  >` >>N Ϗ7^`7!#^#V+V+^ ^#V"O #### F ##F  >/!p}!}/>)_:x{ _:{ />_:{ />_:x{ >)_:{ _:L{ ->_:{ _:L{ -> >( >0 )_:x{  f n*fn *N~S}2*i`NB}^(< "g.<"C!B|( n&*n >!B0 = {/_z/Wv*V( \͡!"u( ͡"y2v*V(\Ͷ(:0͡>" :(!!^B F( Ͷ *tu!w :w !u8*tu:wQ2! ":!:ݾ "V^*R($ = [:co" ! *>V^*R V^*R R _:{ _:L{ -_:{ /*O ~### 6~(!#N#F#^q#Vps#r V#^#QY~( \S\/(((! S! S! S! S V ~  N>(yú=wnf~N y#~ ~ nfut n(~ݾ 0 ^èN @ ^( únf~(~ ~  Fº>y úxw#~ ~ nfut4 f ú ^èN>y@X  V(U F K~(E=wnf~ y #~ ~ nfut n(~ݾ 0 ^ ~ úx 8!! F(Ͷ8 7ZZ7*NV^ ( [!()fn͕ ͕ ͕fn^#Vͬqfnͬq  ~((Fp>~ 2(ww:( >ί~ݾ>~w:(>~w2)G濰~wS2"4!-:)G Ox東ȯ!+5 6!*5 ES@"B!;:)G>!+5 6!*5  *> ñl>2+>2*~ ?ݶ   ú ú~! ~nff>Nyx>~! 7~ ^nfN#~ ~ nfut5y ^ N x~! ~>>>Nyx >=~! ^~  ~ yN y nf~(~ ~  ^q#~ ~ znfut4͊ ^ yN y>Nyx >ȯ' ^ yN yNy >ί""fn}!|! N(V ^ V^{"z"Rrs>>< N(~~w N(~~w!>2E>2K!N"Ll ST"V>2E>2K!\"Ll "bSd#>>2D>2C WxͶ ?ݶ KJ*L:EG>x@( Ͷ N ͞ N :E>(<!D5 6!C5  ñf n F%I <V H <V KFCF  !F ɯGOVVV  =Sched !6>!>E*&c >̈́7y!4> n.EE*&c  -_!q*##"4*"*"*[o&"[o&"!6>!E*&c >w#6:<2©>Z[o&"!6A:W[o&" Vx =y~( G#O#Gxy#:h y!χh y!χNV^fn+ ( p!~w"~w#~w$~w%44> fnRtu44~wɯww~w~w~wɯ>(l)V""fk<(~6=l!)  / !/FNͨ}< 2GOC+Y͞< [)~BKC +͞< V ^ !R<<:<0s!>2 !)0 (): =2 K C + b !6+6>!/E*&c >̈́%E*&c wE*&c yE*&c  ~!E*&c  :E*&c  :/HHHHE*&c  "E*&c  >222[o&"[o&"E*&c >w#6%!q:<2 :D[o&"[TA*~#foDM!>))r =ji`N#Fog_{_z#WHoDCliQ 2r: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 :cli A @DBAA DB H A H  HA!DDA5  -Ni&)))*.F####~8OA͇*.~G *  [!* "|( ! x= c>2"wsr@$$OZozwL gg$I$I$IATTTT @@DB  $@$ ! $I @@D ; MP/M II V2.0 disk re-definition library ; ; Copyright (c) 1979, 1980, 1981 ; Digital Research ; Box 579 ; Pacific Grove, CA ; 93950 ; ; MP/M II logical disk drives are defined using the ; macros given below, where the sequence of calls ; is: ; ; disks n ; diskdef parameter-list-0 ; diskdef parameter-list-1 ; ... ; diskdef parameter-list-n ; endef ; ; where n is the number of logical disk drives attached ; to the MP/M II system, and parameter-list-i defines the ; characteristics of the F@@@A!!$ H  @ @4BI HD!$H$@@ .@$ DAA ! B@ Q@A  B@@@ $@ @9  U P**@ PTi@B$$@B  @I @$ H$D"D"H$H$I$D"D"IHH  *   ith drive (i=0,1,...,n-1) ; ; each parameter-list-i takes the form ; dn,fsc,lsc,[skf],bls,dks,dir,cks,ofs,[k16],[prm] ; where ; dn is the disk number 0,1,...,n-1 ; fsc is the first sector number (usually 0 or 1) ; lsc is the last sector number on a track ; skf is optional "skew factor" for sector translate ; bls is the data block size (1024,2048,...,16384) ; dks is the disk size in bls increments (word) ; dir is the number of directory elements (word) ; cks is the number of dir elements to che S*" *    @$    n @cksum ; ofs is the number of tracks to skip (word) ; k16 is an optional 0 which forces 16K/directory entry ; prm is an optional 0 which marks drive as permanent ; ; for convenience, the form ; dn,dm ; defines disk dn as having the same characteristics as ; a previously defined disk dm. ; ; a standard four drive MP/M II system is defined by ; disks 4 ; diskdef 0,1,26,6,1024,243,64,64,2 ; dsk set 0 ; rept 3 ; dsk set dsk+1 ; diskdef %dsk,0 ; endm ; endef ; ; the value of "begdat" at j blkval set bls/128 ;;number of sectors/block blkshf set 0 ;;counts right 0's in blkval blkmsk set 0 ;;fills with 1's from right rept 16 ;;once for each bit position if blkval=1 exitm endif ;; otherwise, high order 1 not found yet blkshf set blkshf+1 blkmsk set (blkmsk shl 1) or 1 blkval set blkval/2 endm ;; generate the extent mask byte blkval set bls/1024 ;;number of kilobytes/block extmsk set 0 ;;fill from right with 1's rept 16 if blkval=1 exitm endif ;; otherwise more to shi J the end of assembly defines the ; beginning of the uninitialize ram area above the bios, ; while the value of "enddat" defines the next location ; following the end of the data area. the size of this ; area is given by the value of "datsiz" at the end of the ; assembly. note that the allocation vector will be quite ; large if a large disk size is defined with a small block ; size. ; dskhdr macro dn ;; define a single disk header list dpe&dn: dw xlt&dn,0000h ;translate table dw 0000h,0000h ;s ft extmsk set (extmsk shl 1) or 1 blkval set blkval/2 endm ;; may be double byte allocation if (dks) > 256 extmsk set (extmsk shr 1) endif ;; may be optional [0] in last position if not nul k16 extmsk set k16 endif ;; now generate directory reservation bit vector dirrem set dir ;;# remaining to process dirbks set bls/32 ;;number of entries per block dirblk set 0 ;;fill with 1's on each loop rept 16 if dirrem=0 exitm endif ;; not complete, iterate once again ;; shift right and a cratch area dw dirbuf,dpb&dn ;dir buff,parm block dw csv&dn,alv&dn ;check, alloc vectors endm ; disks macro nd ;; define nd disks ndisks set nd ;;for later reference dpbase equ $ ;base of disk parameter blocks ;; generate the nd elements dsknxt set 0 rept nd dskhdr %dsknxt dsknxt set dsknxt+1 endm endm ; dpbhdr macro dn dpb&dn equ $ ;disk parm block endm ; ddb macro data,comment ;; define a db statement db data comment endm ; ddw macro data,comment ;; define a dw state *dd 1 high order bit dirblk set (dirblk shr 1) or 8000h if dirrem > dirbks dirrem set dirrem-dirbks else dirrem set 0 endif endm dpbhdr dn ;;generate equ $ ddw %sectors,<;sec per track> ddb %blkshf,<;block shift> ddb %blkmsk,<;block mask> ddb %extmsk,<;extnt mask> ddw %(dks)-1,<;disk size-1> ddw %(dir)-1,<;directory max> ddb %dirblk shr 8,<;alloc0> ddb %dirblk and 0ffh,<;alloc1> if nul prm ddw %(cks)/4,<;check size> else ddw 8000h+cksz,<;permanent disk with check size> ment dw data comment endm ; gcd macro m,n ;; greatest common divisor of m,n ;; produces value gcdn as result ;; (used in sector translate table generation) gcdm set m ;;variable for m gcdn set n ;;variable for n gcdr set 0 ;;variable for r rept 65535 gcdx set gcdm/gcdn gcdr set gcdm - gcdx*gcdn if gcdr = 0 exitm endif gcdm set gcdn gcdn set gcdr endm endm ; diskdef macro dn,fsc,lsc,skf,bls,dks,dir,cks,ofs,k16,prm ;; generate the set statements for later tables if nul lsc ; endif ddw %ofs,<;offset> ;; generate the translate table, if requested if nul skf xlt&dn equ 0 ;no xlate table else if skf = 0 xlt&dn equ 0 ;no xlate table else ;; generate the translate table nxtsec set 0 ;;next sector to fill nxtbas set 0 ;;moves by one on overflow gcd %sectors,skf ;; gcdn = gcd(sectors,skew) neltst set sectors/gcdn ;; neltst is number of elements to generate ;; before we overlap previous elements nelts set neltst ;;counter xlt&dn equ $ ;translate table rept s ; current disk dn same as previous fsc dpb&dn equ dpb&fsc ;equivalent parameters als&dn equ als&fsc ;same allocation vector size css&dn equ css&fsc ;same checksum vector size xlt&dn equ xlt&fsc ;same translate table else cksz set (cks)/4 secmax set lsc-(fsc) ;;sectors 0...secmax sectors set secmax+1;;number of sectors als&dn set (dks)/8 ;;size of allocation vector if ((dks) mod 8) ne 0 als&dn set als&dn+1 endif css&dn set cksz ;;number of checksum elements ;; generate the block shift value  zectors ;;once for each sector if sectors < 256 ddb %nxtsec+(fsc) else ddw %nxtsec+(fsc) endif nxtsec set nxtsec+(skf) if nxtsec >= sectors nxtsec set nxtsec-sectors endif nelts set nelts-1 if nelts = 0 nxtbas set nxtbas+1 nxtsec set nxtbas nelts set neltst endif endm endif ;;end of nul fac test endif ;;end of nul bls test endm ; defds macro lab,space lab: ds space endm ; lds macro lb,dn,val defds lb&dn,%val&dn endm ; endef macro ;; generate the necessary ram dat {~'- Enter STOPSPLR to abort the spooler $* #~+>go" :]DS:+[>2+6~2+m:b2b\hing from console ***$MP/M II V2.0 Spooler $ Illegal File Name $ Can't Open File = $*** Spool Queue is full *** $*** Printer busy *** - a areas begdat equ $ dirbuf: ds 128 ;directory access buffer dsknxt set 0 rept ndisks ;;once for each disk lds alv,%dsknxt,als lds csv,%dsknxt,css dsknxt set dsknxt+1 endm enddat equ $ datsiz equ $-begdat force: db 0 ;force out last byte in hex file endm ; 6jj*R0!6zz{zA_A?ɯ2.2*T0"V0!.8w# *V0*K0{zҤ*b0+"X0 =$* Spooler will wait until printer free $1J!" > lʳ* #""  d,JðZc­J:\ʕ:\A=Oͬ:ͬ!h6$]J ͬ ͬͣ6 o&)))) _!so&))))_!s JfdS"OJ)2R)!" > ldH<* #""  d9:b2b\c9!|6sͣ> l+N#F [H9* #"!""  d3:D N*X0#Þ!.*V0".#"X0$:d0<:0<! 0~?<#ʐ: 0͡!.".^#V"V0}{##~2.*.^#V#"."V0*V0}d##~<2.G*V0##"X0:.> u!.~w>w> u:.P'!5^!/~ !~620͕%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 !h6\s> l+N#F ]H3!" !\"Xv!p+q*  !p+q*!p+q*!p+q*!p+q*'!q*&!q*&!p+q!6>!p*&*~2y: :O>H2y#!6 !6:!i: >!4: K!6*MͼZbA2!4(!4>!p+q>(!"!s:*;*DM͓\̓2*#"o2>lË!"*+!z*;* t-F2 !2~B6~44O!! s#r!1~ _6^4! w!p!2~~!55N!! N#fiooo&)^#fk!4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7͡ :\ ʻ 24!dͮ 25ͮ 27ͮ 26!8 ( ʃ !Y 1  :7ʞ !z 8  !"2D2X2#! 8 !ͼ z{* ! !"!8 w  DM *"_%yJ2DM!>))J =B^#V|g}o Si`N#Fogo&og_{_z#W9\ SPOOLQ B "HH  @I$$HHI!$ I$!@@"I! !$I DD$$$$$$ ,#  +6# *#"~!ͼ G:6QxJQS*!w#"! 1 !"!Y~~# …¡z!ͼ wʹ* ! w#" ! 8 !" ! zz_O4:  :6y:f! G~#x=2f> > ! >Z6 #='G! ~ p( O*}O>4?:7w:#ĸ*"!͸* }w>ͪg( ʆ1 Y :7ʗ8 z !<ͼ MP/M ASSEMBLER - VER 2.0 NO SOURCE FILE PRESENT NO DIRECTORY SPACE SOURCE FILE NAME ERROR SOURCE =$ D8@" " B$HHHHA" "D$$DA"I@ :<2!ژ!6 >!]Ҥ; !6:Q::H: !6*M : !6@!HBDHBH  A$@@HI"I$DBH$HA"! HH$"I  B@I"B N Q  I$$B ,?$DBH@B@IA @$A$B H BBDBI$I b H  ""B$H@ !! B "$!!$$BB! $ $!$!B$A  "A!$I /A B@A$$A @@H$PD@!  "$ BB@ * @B @HD ,oÓ:g:k ;,!ɯ22=2l!"]!~H5_!m~0:ą:  *":  :g‰:j̅ԅ!k^#=ʅVq”*hqͦ1& O:lµ̅>2ly:_!w~!s!m~ùy !~=w_!m~ ͅͰ>2lyPLnR>UX:l̅2l͓*>ETINRINXIRPJMPLDALOW2C!" """ :gʼ:k*1 |R|ͦ0FIL: R $@D$   I! ! B D $$$ I$H H$BHI$$I  @B$DI$!$$BBHHI$$ $$$$I!$IH$ I$$"I$$"B$HH !B$BI BBHI"@!I $$I$!A @     R* } *" :g¿:k:¿üX!C^#fk[@ :gŒ:j=ʌG!kʆF#H vÛc*| EH ͺ,^1 ͦ *""1 EH DH ͺ,1 ͦ :  1:  " > 2 :g|:k |Ë  |*" ͩ !6="1 :  1}1:gn:k>BʋSSͦSSxS 1:  1"" ͦ 1 |R >O U!" 1 1!|_!^#fk $8AP`ix  H ñññ81Ľ y0îH ñGîG  ñH ñ(Ľ yîH ñîîĽ y0îîH ñG 1:g :k,; c*| } 8OĽ y0G G t :g):k,.>C :g|:k Jü;r :gR:k ʼʋ!ʼR!ʼʋ>SR{ozg!~4ʧͦ !6 ! **̈́**̈́\iͩ !w#H USE FACTOR !* "z{*"  ~Abort failed.$1:m %ͅ2F:m02mO> @:m0A 2m:m2. ] -N͎gl|v!p+q* !p+q*1 p  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  A : 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{zA_A?ɯ2.2*T0"V0!.8w# *V0*K0{zҤ*b0+"X0 =$* B}1*" COPYRIGHT(C) 1981, DIGITAL RESEARCH F!Fʹ%*X0"`0>2Z0*X0":0k: 0T!T:\0¦:O0¦:0=ʦ ʦ*"X0 !':[0'Tx »!Z0 TT!Z05T:\0!":]0!**V0":O0*X0~ Ĵ*  N*X0#Þ!.*V0".#"X0$:d0<:0<! 0~?<#ʐ: 0͡!.".^#V"V0}{##~2.*.^#V#"."V0*V0}d##~<2.G*V0##"X0:.> u!.~w>w> u:.P'!5^!/~ !~620͕%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  á 4êü /L9"R0"P0͊  BĢASM>#G*I0!" PRN0 :Z0 !0N*0:O0Ÿ"HEXX0yʛ 'É' Ͳ >ͮ 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 >''!: X t-F2 !2~B6~44O!! s#r!1~ _6^4! w!p!2~~!55N!! N#fiooo&)^#fk!4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7͡ :\ ʻ 24!dͮ 25ͮ 27ͮ 26!8 ( ʃ !Y 1  :7ʞ !z 8  !"2D2X2#! 8 !ͼ z{* ! !"!8 w 8CCMPCPIDAADADDCRDCXENDEQUHLTINRINXJMPLDALXIMODMOVMVINOPNOTORAORGORIOUTPOPPSWRALRARRETRLCRRCRSTSBBSBISETSHLSHRSTASTCSUBSUIXORXRAXRICALLENDMLDAXLHLDPCHLPUSHSHLDSPHLSTAXXCHGXTHLENDIFMACROTITLE  PF FP! ( 2/?'  v:P@< !  PP27 ( *"  NZZ NCC POPEP M x_BH!œk#¶ ¦{KÈCÈ<:kJCR:j  !m6 s!l ,#  +6# *#"~!ͼ G:6QxJQS*!w#"! 1 !"!Y~~# …¡z!ͼ wʹ* ! w#" ! 8 !" ! zz_O4:  :6y:f! G~#x=2f> > ! >Z6 #='G! ~ p( O*}O>4?:7w:#ĸ*"!͸* }w>ͪg( ʆ1 Y :7ʗ8 z !<ͼ MP/M ASSEMBLER - VER 2.0 NO SOURCE FILE PRESENT NO DIRECTORY SPACE SOURCE FILE NAME ERROR SOURCE 5#  ɯ<:jO=_Z!F!V#fjQ̓E!^#Vo&)~#FxGyѯ<ɤ.àn8 +aɯo>g"k!m6ů{_zW5>)D*kOxGd !m?F {DM!xGyOڂÃ)sn55)=â|g}o=î--#zg{ozg{ozg{ P FILE READ ERROR OUTPUT FILE WRITE ERROR CANNOT CLOSE FILES END OF ASSEMBLY G:7xʘ!#~ʄl͸Ä**!O {zʊ͸*"!!#^4!$wͯͯWƐ'@'ê>:ͪ!#^Ww*!{͚|͚}͚͚{!$~#͚͚> ͪ> ͪ36@2! 0 0:fZ0_<2f! wI2 2f> 2 >2fɯ2j2 !j~@_6%^4#: w~$w: 0 q: A: A͋q: a{_2  2 :gĞ !ɯ2gI:  ;*:  ͭ; ͭ ,oÓ:g:k ;,!ɯ22=2l!"]!~H5_!m~0:ą:  *":  :g‰:j̅ԅ!k^#=ʅVq”*hqͦ1& O:lµ̅>2ly:_!w~!s!m~ùy !~=w_!m~ ͅͰ>2lyPLnR>UX:l̅2l͓*>ETINRINXIRPJMPLDALOW2C!" """ :gʼ:k*1 |R|ͦ0FIL: R ͋ >@q>@: '(2 >@ >:! 6 >2f>2g: 2 Qͭ:gĞ! :gsjC͖C jC|C: OʑQ–>ÝH§>2 2 : B´>ûD> ¿!j52 !"h!jN#~#A07O! ~*h!) "h :  %'Cͭ'C>V+>O+K: Kà\ÞØ`rÍÖ0Pg>ã6r>ã:[0'ƒ2[0>ã ¡:.ʔ>+2/͕%!/6 >20>20:[02́:0:Z0: 0=!EQ<!LT:[0=!LE>!GT:[0=!GE2[0" 0!04   R* } *" :g¿:k:¿üX!C^#fk[@ :gŒ:j=ʌG!kʆF#H vÛc*| EH ͺ,^1 ͦ *""1 EH DH ͺ,1 ͦ :  1:  " > 2 :g|:k |Ë  |*" ͩ !6="1 :  1}1:gn:k>BʋSSͦSSxS 1:  1"" ͦ 1 |R >O U!" 1 1!|_!^#fk $8AP`ix >20![0:0/ʦg¦´/ʦA¦:[0O<QA>HHR>22[0m:B_>![w#w#b!"!jF#v2[G*##~w*##~<*}q!j~ڬ6![^![^#fk"͎͘!jG#*####*^#Vû!j^*"*{zA"*![N![ N#Fr+sq#pj/>G=#w#w3#w#w!JSYMBOL TABLE OVERFLOW G*##~w*##~͎*_###s#r^#V~`à 4 Wm ()*+,-/ABCDEHLMDBDIDSDWEIIFINORSPACIADCADDADIANAANDANICMACM  H ñññ81Ľ y0îH ñGîG  ñH ñ(Ľ yîH ñîîĽ y0îîH ñG 1:g :k,; c*| } 8OĽ y0G G t :g):k,.>C :g|:k Jü;r :gR:k ʼʋ!ʼR!ʼʋ>SR{ozg!~4ʧͦ !6 ! **̈́**̈́\iͩ !w#H USE FACTOR !* "z{*"  ( * "I !" :1 R O*UR X* G:xl :  *̩ : l x͖ *#"EH DH 0:~ ! ^4! w͆ Æ *! 6z͖ {͖ 4>R>V>D >P >L >N$ $I$x  O/a!$B !$ $BI$I!"$$$D$DBH@B@IA @$A$B H BBDBI$I b H  ""B$H@ !! B "$!!$$BB! $ $!$!B$A  "A!$I /A B@A$$A @@H$PD@!  "$ BB@ * @B @HD  $@D$   I! ! B D $$$ I$H H$BHI$$I  @B$DI$!$$BBHHI$$ $$$$I!$IH$ I$$"I$$"B$HH !B$BI BBHI"@!I $$I$!A @      i;1202)v!p+q* 3 Console = x$$A@$  @[( Dump $ No input file present on disk$"I!$$DA@BD @@3     M ~6 File not found.$ System Files Exist$ Bad entry$1Z'2:mS2!"d!\"f:<2O! ~ s\*& ~[¡*& "d!6G!\6#6 ͊>d:ҺG͊áIv!Zq*Z&!\p+q*[  !^p+q*]  F !`p+q*_!bp+q*a !cq*c& d  > !w!{61: 0#wÃ!{6 :0#wh:ҙ]!6!6!6:\·<2\:] !6> !*&\ 6?!4\2::`2O! >ր2! ::/!Hү:<2_!͵>VR:\A=O[ : !6> !ڬ: € :!O! >Oҥ2I!4jû:һ!6\2::*d#"d@"dd* 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 !I*d~]'*d#"d~"!"d!6*d~[5!6>dF!6!"f:Ү:Sg!6ë:G«: ʄ:0 2Ô: ʔ:02:ҫ:2O0!6M!\"fDM!>))덑o|g =¼_{ozgi`N#Fogo&og9Directory for User x:$= ͻ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*. ڋ{ @I$ $ HD"I AAA"!DB "B@"I H D$! $!$ IDBIDI$DHA HIBBBB@D =&: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%!".!/ "#~# @ @1!#6:<!"!È:#<2#O:ڈ*#& ~A/>P/H҅*#& ~AO! !Ͱ+s#r<*!DM͕ͥv! p+q*%i`N#Fog" 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    "$  !!#_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}ʝ##~<O4G##ڝ—ʝ …*#5k*#5*|3"#5s#r+*z3s#r*#5##~_"#5Ü>2v32w322(!~38w# ͖!~3"z3>2y3*z3^#V#"z3"#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  @ J4ʩ##~<2x3G*#5###"%5:w37> ͺ!w3~w7>w> ͺ:w3Pd!5^!K4~ B!~624(02w3%!>%|_}_> ͺ!w3~w:x3ʜ=͢%ͺ!w34È*#5^#V"#5!y35:24(0!^4!K4w>R0>V0>D>P>L>O>B>S>N08!u~ڇK6N4!E s#r!U :mw* 5!] s#r!t~ ڹ6K^4!1w!;p!u~K!5N!E ~#fo!U ~2n!] ^#V"p4Z:'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 K2oo&) ^#fkN]ivKzV{K>ɯo>g"!6ů{_zW5>)D*OxGғ !?uDM!xGyOڱò)â͝ddJ)=J|g}o=2o2o*p"rOxKxGyKxGy0KG*p*r}|K\\z{W¢Ü}|ڜâWʜllyWœâ!!#Qzg{ozg{ozg{ol&:oO:n2m*p" 52n2ox:4ql~!9"*1lͧ!ͧ\>2(!ͬ\G}J}dW|͚}͚#> px͚)}** _> p> p Ҕ0Ö7p͈͈ :(½ʽ7_<2(!~ɯ2|!b~w\\MP/M II V2.0 File: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[( Dump $ No input file present on disk$"I!$$DA@BD @@3!4^*5"#5*5{z$"5!P!"Q"/$#w#w*#5!P"N*Q" "S"N#Fr+sq#p4V$>G=#w#6#w]$*5!4n& {ozg"#5!5{#z$"5f$*5!4N#yʦ$ ~Ù$f$!U3"Q"/$:P"%*5!3{#z"#5%_!U3*#5~#~&%~#$"5ÿ$&%!%*A16>%: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~& SYMBOL TABLE OVERFLOW *#5###w*#5###~,#*#5_####&%s#r&%^#V&%##"%5F%wF%~#!4~l%6~=ͫ%ͫ%!4N#~ͫ% y%͢%͢%2P"623y"!v36*5"3$"32:4*W"#5GJ2:42942(524> 2S(0>24ɯ242T!4~@`65!^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: *XXCHGXTHLENDIFEXITMEXTRNLOCALMACROSTKLNTITLECOMMONINPAGEMACLIBPUBLIC7 PF FPA A A* A A A(#&&#&2#/?&#' '( v'( %:P!@"<& #*)&# PP%27&#(&#  $ %*%"$  NZZ NCC POPEP M a{xʑ(_BH!f(4D(#ƒ( p({ڍ(KR(CR(<:4 JCR:4(ʿ((!46 4(!4(# ( ɯ<:4O=_.)!D'F!%V#fjQM()"} COPYRIGHT (C) 1981, DIGITAL RESEARCH Error Creating Password$DISK OR DIRECTORY FULL$BAK$$$Password ? $FILE EXISTS, ERASE IT$** FILE IS READ/ONLY **$NEW FILE$BAK$$$-(Y/N)?$Requires MP/M 2.0$NO MEMORY$Filename Required$BREAK "$" AT $1 "*}0*D2%!%^#Vo&)O~#F͔(ͨ(xGyѯ*ÿ*:?*ÿ*:@*ÿ*~x/~# *> x/\ |Hx ! ͆" k+!s~1!6x *M9 h *M9 ] 1!6!6!6Z:2EiҮQ!:ʨ::H2 S HiQ:2:2:2S :I!I::H2P:%2&?-$-w#+!\64 #+>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 ͗:::H:Hx!"!6#~N] uK:e] Pu:&!%uͧ eñ::%2'O>Ғ ͮ>!͙:&!'H*+! ~ F!6!%6!"!6!6:%2(!&:&2(:'2%:(!%ͧ :%2'!6:'2%ñ:V>͎-AF*! ~2O9 : N*+"!6ñ*M /p^ͮ:@Oͮ: ~%ñ:®: ژ:%<2%î: ®:%O>!%wm: ¼P: !6  ͮ!6:%:!] S O͐-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#"*!-*!"*** :R!<6?͗->!<'#ͱ!6 :<2g.> -I:d:2J=ͽ v>!<vͱg!'6!;6͚ !<6:5›!6OAM2ʬmÛ! 6:!: * &^ ~2: <2 møS Q͐ S :-Z!6:#ZU5::2!6L U::UZ :U*#""a!6:B‚!>w!"*"S :C“S :D¤S :KµKS :LS :P"!6n6̓S :TS^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  :U:2S :VU"ǴDM͡/9 *DM͡] R:2S : ::H~S :"HP :A!6*"*""Һ6Xú!6M :F͐6͟M :Js ͐͸:2͸6p ͟:=2:<2!6 *&o ~2m *" *M*/O #!:͎"!6* " M :M:H !6>͎Ÿ /]:<2O! Hqy ʽ ß :2!6*#s#rM :N6 ͐63 */0 B  AB0O9  9 ò!p+q:/ *DM͡:9  9 :A 9 F*9 *DM:YG>!ҲB p#!:ڞ>͎ʙ*+">w™#!6:<2=O! N͊:X O͊:!6:%!́G*9 6 !6 9 !%6!I:2+*&J 6 :<2=O!J N͊*Me u :<k? f>!<6:<<2<=O! N͊*"!"!"!\":Sʲ .l -ª!h6!j6!|6.!\ -!:*Me \ :5j*Me uJ!6!"|!6́- # M :S‰ ͐͸6҆ ͟:2͎+s#r!:҃ *&o ~2:<2m_ D M :W— M :X ͕"һ ̀= :J2 :/ ̀!6= = :J2:5 XK*"  ́ * ! N* " M :ZB "2 X 2 A6? 2 M :M .S .sv!$q:v *$&!)q:) ڒ !%4:) Ÿ !%6*)Mj :%° ͂  ͂ ͂ !%55!*q:* :%O>H2+y !*6 !,6:+!, **M͂ u \ͭ "" *"}@*"|@] ] u \ͭ ""*"}25:eXu:fu:dp!56u! 6:5—\ :5ŽXx ]  :2!e!:*Me e!6u  :5X:! :!2u ͕ !6!6!"!">͎!""/H*+">>!":s*#"*"!" +" Å*"*" !" ! 6:  ́2 * *" ! ~ H* "Ñ*+"*+">w2 : /! 6 ́+s#r : !,4 !-q:-  >:- :- H:- H!.q*.M U ^ :.@2.*.M  9  9 !0p+q*/ !2p+q] *1DMh !4p+q*3 !7p+q*625!9p+q*8!;p+q*:25!=p+q*<25!?p+q*>!Ap+q*@!Cp+q*B!Ep+q*D25!Gp+q*F!H6H͊  Y >>!q*&!p+q*!p+q*!p+q. -£ *g¿ )x !p+q*f!q*&-: =  8  * "Ê:'*"*+"5*#"*#"*#"*#"*+"*+"*#"! q:§́Ҥ>: ҡ*! ~2 “V*! : w6j́F*! ~2 *+": *! : wNç^^K:+*"́!"(́"W*"́͑L*"W**"́g9O͘2 z/*! : w6: ”VX! q:ҫ* M͊: ́ڿ/>*! ~2 Oͨ: Vï6 ́͑/!p+q*DMx ] !p+qu *DM !s+q+p+q:=2W*:w*#":ͽ A!p+q.*DM -w!6!I6!]6!6*Me ^u *Me !6:! **DMu \ 25>!5X**6:2*":<2²!"́$ͣ**~2<*#":*Me !g+!s{\͡!6:!ڝ**DMu  ʉX*":<2d͡!"!q́ڻ@**:w*#"!q:͕:2J= X!6:J2* Vͯ!6!"*""(65ͯ(́I!6 J2i*MͨT́}9*! :w6: –V]2: :/HH/͗: !6 !6 :.ø*&o :w:<2d9! s+q*" ! 6: / ́H{* #"" : 2 * &o *! ! : 2 /Hx: <2 *#":: Ҍ*+": !6͸:2*/Ұ#*M:<<2<=O! Hq**DMK!6:!"*" *" *&^ :w:<2*}%ͨ@ͽ :59X: T:2u ͅ Xe͝*Me .\ -lu & ͝[e*Me u & . -¥!q:ʻ*M9 !q:a/>z!/H!q*M:_:] ^x  -!6>!ڃa O2 2*& :w: =Ã:H:n:[:=2O! 6 :y :<2 B 2!q:ҝ*M:!p+q!'"!6>͎**>{2**>"*! >":!!6: T +! ~2 :%H#] *"  ́m: Q*#"B Q#* ! ~2 O9 * " )!"*"*"un:2 !6n: 2́>͎H/|! 6>! B A>ͥ: <2 !6!"6$́/!X!6 m!6 m!6*M2 *M͊2: /!+w!6]26! q! ::IH:H! q* Mi] * Mj  X O2 ] : Yf>>:02 O> /!" *)))*) * &  u \ͭ "" *"}@*"|@] ] u \ͭ ""*"}25:eXu:fu:dp!56u! 6:5—\ :5ŽXx ]  :2!e!:*Me e!6u  :5X:! :!2u ͕ !6!6!"!">͎!""/H*+">>!":s*#"*"!" +" Å*"*" !" ! 6:  ́2 * *" ! ~ H* "Ñ*+"*+">w2 : /! 6 ́+s#r :o"Ź,!6́+s#r=!6́"DM!>))덑o|gW =E^#V) a^#V|g}o k_{ozgi`N#Fogo&og_{_z#W H ¨=§5 LIB X$$$$$$$LIB[8  * "Ê:'*"*+"5*#"*#"*#"*#"*+"*+"*#"! q:§́Ҥ>: ҡ*! ~2 “V*! : w6j́F*! ~2 *+": *! : wNç^^K:+*"́!"(́"W*"́͑L*"W**"́g9O͘2 z/*! : w6: ”VX! q:ҫ* M͊: ́ڿ/>*! ~2 Oͨ: Vï6 ́͑/ I@AI$@I$H"$IIH $$D$$I"A$"I$HI"I"B@  $I"I!$BB@$@DII!$$I$"BDBA!$! HI!I$$$$$$HBD$BHBI"HHI $HI$$I $$HI"I$$BD@I $I"HBHII $$$!$"HBI$$ DAI$ `"A I $I$$@H$BHI$$I $I!I!"BHHI$HDBBA$H  B  DZHD $ ""ID $!AD  B$A$"H$! ""BD$$I"I$DDD$BVͯ!6!"*""(65ͯ(́I!6 J2i*MͨT́}9*! :w6: –V]2: :/HH/͗: !6 !6 :.ø*&o :w:<2d9! s+q*" ! 6: / ́H{* #"" : 2 * &o *! ! : 2 /Hx: <2 *#":: Ҍ*+": !6͸:2*/Ұ#*M:<<2<=O! Hq**DMK!6:!"*" *" *bHII$!$II$$HDD@DH"I D I !!$A$ D$"@BB B!HB!D$BDD! $I HH!@D $ @H$BB@HB$I!$I$A$I"BI!!!! $$I$H$HI$$H@@@$$ @D@DBIDI$$!$I$DH I I$I$"$D!""$DI$I$I$ $"I$BD$I"$$H"BBBHDBDB$@HHB@D$H!$A  A$D $I "DH"DHI$H$$HI$ IDI ""H$B$$$H4  +! ~2 :%H#] *"  ́m: Q*#"B Q#* ! ~2 O9 * " )!"*"*"un:2 !6n: 2́>͎H/|! 6>! B A>ͥ: <2 !6!"6$́/!X!6 m!6 m!6*M2 *M͊2: /!+w!6]26! q! ::IH:H! q* Mi] * Mj  X O2 ] : Yf>>:02 O> /!" *)))*) * & B0O9  9 ò!p+q:/ *DM͡:9  9 :A 9 F*9 *DM:YG>!ҲB p#!:ڞ>͎ʙ*+">w™#!6:<2=O! N͊:X O͊:!6:%!́G*9 6 !6 9 !%6!I:2+*&J 6 :<2=O!J N͊*Me u :<k? f>!<6:<<2<=O! N͊*"!"!"!\":Sʲ .l -ª!h6!j6!|6.!\ -!:*Me \ :5j*Me  3o"Ź,!6́+s#r=!6́"DM!>))덑o|gW =E^#V) a^#V|g}o k_{ozgi`N#Fogo&og_{_z#W H ¨=§5 LIB X$$$$$$$LIB[ STAR LD R,A STAR Move A to R LXIX nnnn LD IX,nnnn LXI IX,nnnn Load IX immediate (16 bits) LXIY nnnn LD IY,nnnn LXI IY,nnnn Load IY immediate (16 bits) LBCD nnnn LD BC,(nnnn) LBCD nnnn Load BC direct (from memory at nnnn) LDED nnnn LD DE,(nnnn) LDED nnnn Load DE direct LSPD nnnn LD SP,(nnnn) LSPD nnnn Load SP direct LIXD nnnn LD IX,(nnnn) LIXD nnnn Load IX direct LIYD nnnn LD IY,(nnnn) LIYD nnnn Load IY direct SBCD nnnn LD (nnnn), I@AI$@I$H"$IIH $$D$$I"A$"I$HI"I"B@  $I"I!$BB@$@DII!$$I$"BDBA!$! HI!I$$$$$$HBD$BHBI"HHI $HI$$I $$HI"I$$BD@I $I"HBHII $$$!$"HBI$$ DAI$ `"A I $I$$@H$BHI$$I $I!I!"BHHI$HDBBA$H  B  DZHD $ ""ID $!AD  B$A$"H$! ""BD$$I"I$DDD$BBC SBCD nnnn Store BC direct (to memory at nnnn) SDED nnnn LD (nnnn),DE SDED nnnn Store DE direct SSPD nnnn LD (nnnn),SP SSPD nnnn Store SP direct SIXD nnnn LD (nnnn),IX SIXD nnnn Store IX direct SIYD nnnn LD (nnnn),IY SIYD nnnn Store IY direct SPIX LD SP,IX SPIX Copy IX to the SP SPIY LD SP,IY SPIY Copy IY to the SP PUSHIX PUSH IX PUSH IX Push IX into the stack PUSHIY PUSH IY PUSH IY Push IY into the stack POPIX POP I(& Z-80 Macro Library Documentation -- I. The purpose of this library is to enable the assembly of the Z-80 instruction set on a CP/M sytem using the CP/M MAC macro assembler. This library is invoked with the pseudo-op: " MACLIB Z80 " II. The following symbols and notations are used in the individual macro descriptions; r - Any of the 8 bit registers: A, B, C, D, E, H, L, or M rr - Any of the 16 bit register pairs: BC, DE, HL, or SP nn&X POP IX Pop IX from the stack POPIY POP IY POP IY Pop IY from the stack EXAF EX AF,AF' EXAF Exchange AF and the alternate, AF' EXX EXX EXX Exchange BC DE HL with BC' DE' HL' XTIX EX (SP),IX XTIX Exchange IX with the top of the stack XTIY EX (SP),IY XTIY Exchange IY with the top of the stack LDI LDI LDI Move m(HL) to m(DE), increment DE and HL, decrement BC LDIR LDIR LDIR Repeat LDI until BC = 0 LDD LDD LDD Mov - 8 bit immediate data (0 through 255) d - 8 bit signed displacment (-128 through +127) nnnn - 16 bit address or immediate data (0 through 65535) b - bit number (0-7, 7 is most significant, 0 is least) addr - 16 bit address within PC+127 throug^h PC-128 m(zzz) - Memory at address "zzz" III. MACLIB ver. Zilog ver TDL ver -- --- --x- LDX r,d LD r,(IX+d) MOV r,d(IX) Load register from indexed memory (with IX) LDY r,d LD r,(IY+d) MOV r,d(I e m(HL) to m(DE), decrement HL, DE, and BC LDDR LDDR LDDR Repeat LDD until BC = 0 CCI CPI CCI Compare A with m(HL), increment HL, decrement BC CCIR CPIR CCIR Repeat CCI until BC = 0 or A = m(HL) CCD CPD CCD Compare A with m(HL), decrement HL and BC CCDR CPDR CCDR Repeat CCD until BC = 0 or A = m(HL) ADDX d ADD (IX+d) ADD d(IX) Indexed add to A ADDY d ADD (IY+d) ADD d(IY) Indexed add to A ADCX d ADC (IX+d) ADC d(IX) IY) Load register from indexed memory (with IY) STX r,d LD (IX+d),r MOV d(IX),r Store register to indexed memory (with IX) STY r,d LD (IY+d),r MOV d(IY),r Store register to indexed memory (with IY) MVIX nn,d LD (IX+d),nn MVI d(IX) Move immediate to indexed memory (with IX) MVIY nn,d LD (IY+d),nn MVI d(IY) Move immediate to indexed memory (with IY) LDAI LD A,I LDAI Move I to A LDAR LD A,R LDAR Move R to A STAI LD I,A STAI Move A to I ndexed add with carry ADCY d ADC (IY+d) ADC d(IY) Indexed add with carry SUBX d SUB (IX+d) SUB d(IX) Indexed subtract SUBY d SUB (IY+d) SUB d(IY) Indexed Subtract SBCX d SBC (IX+d) SBB d(IX) Indexed subtract with "borrow" SBCY d SBC (IY+d) SBB d(IY) Indexed subtract with borrow ANDX d AND (IX+d) ANA d(IX) Indexed logical and ANDY d AND (IY+d) ANA d(IY) Indexed logical and XORX d XOR (IX+d) XRA d(IX) Indexed logical exclusive or K~ô BDOS Bad Sector$ Drive $Read Only$Currently Opened$Password Error$Password ? $Not erased: $Requires MP/M 2.0$Invalid Parameter$Confirm delete all user files (Y/N)?$ No file$1e"*}0|Ha!"n!\"p'2K0:m :mX!t6s9!6:<2O!\ ~?7 > !n:tnͪ2:y:YHn9B\22ʥ:å:Ң*M͍åO9v!eq*e&!gp+q*f   !ip+q*h!kp+q*j!mp+q*l -n"r ͳ ͳ!xs+q+p+q:x=2xʌ*u:ww*u#"uo!yq ͳ:y¤:y²:y:yH:y(:y9:y9!{p+q!|6> !|1:| .ͳ*|&*z>Oͳ!|4!~p+q:tJ*} >wl*}:\w*}DM"*} >w*}*|2:Hҙ*M͍:>2aڹ:{ҹ: :WHl b!6>!H͠2 *&l :w: WH::6:#:=2O!l 6 :A9!42\2::o&"*r ^#V"*r ~2*DM22²ͽ*DM22:ʽ*r *s#r*r :w2^WT*DM*M͍ I  I@I$HHHI$""I$$BBI!"ID@@" A@$D$HI!$ @H" $BAH$$$$"HHDBI !!$A$I$BHI $&@  ~ó BDOS Bad Sector$ Drive $Read Only$Currently Opened$Password Error$Password ? $Not erased, $Requires MP/M 2.0$Invalid Parameter$Too many directory entries for query.$No file$1" * }0|Ha:m :mX!6sZ:S!"!\"c:\1Oy<2\! 6H2 Q\2 : ʩ: `O! " :  : <2 ~Z. * # * &< -˜/2 H: º! 6: ! :\A=O: ! 6> ! : . * &< * & N: <2  ?2   : y: YHҼ.  * &< DM] -g\ 2 ʼ: ҏ* M͢ê: ª* M$͘\ 2 : ʹ* M$l: <2 ¿Zv!q*&!p+q* n  $HI$I! H $$HH! $!$ $HBHB@  I BDHH$" AA D @!$D$$@ I $$A$H $"HHDBHI "$$"$ B=  !p+q*!p+q*!p+q* -  ! s+q+p+q: =2 ʡ* : w* #" Ä! q : ¹: : : H: (: 9:  Z! p+q:%* >wl* :\w* DM8" * >w* }x* |2 : Ht* M͢: >2 aڔ: {Ҕ: : Hl w! 6>! {2 * &l : w: : Þ:  : Þ: =2 O @ WP!l 6 ÷: Z! 4®2 ! qlT* M͢lDM!>))K =C 7 ~0123456789ABCDEF Top of memory = $FFH Number of consoles = $ Debugger breakpoint restart # = $ Stack is swapped on BDOS calls$ Memory is bank switched$ BDOS disk file management is bank switched$ Z80 complementary registers managed by dispatche -ur$Ready Process(es):$Process(es) DQing:$ [Process(es) NQing:$ [Delayed Process(es):$Polling Process(es):$Process(es) Flag Waiting:$ - Flag(s) Set:$Queue(s):$Process(es) Attached to Consoles:$ [] - Unattached$ Process(es) Waiting for Consoles:$ [] - Process(es) Attached to Printers:$ [] - Unattached$ Process(es) Waiting for Printers:$ [] - Memory Allocation:$ Base = $00H Size = $00$H Bank = $H * Free *$H * Reserved *$H Allocated to $****** MP/M II V2.0 Status Display ******ke4*&$  * >O! NH]H!4% " " * ^#V" " ^#V" * "  * "  * "  * " * " * " * " 4* " V* " * " w* " T* " U* " * " * " * " _]ogDM!>))덑o|g = DM!>))3 =+ i`N#Fogo&og_{_z#WR$1 / xxͰ$ͧͷ!͋͛ͫd> +  !sv! q* &! p+q*  ! p+q*   H H! q: O! NH* &!  NH! r+s+q* : : * DMX! 6: ! * >OH* #" ! 4! r+s+p+q+q* : x* M* Ͱ* : =! 6B! 6!z6> E :z?HHҕ:z<2zO! * s#r* ^#V" H:z¦!{6:z!{#*{& ) ^#V" `i+4 x H! 6 H* Ͱ* ~[H-B /I $I$" D@$B $ !"@" H$  " H  AB"$$HH B$ B$$$HH! !$ $AHH@ I@@D"@!DHHB$! "$H@ @ @AHB!! HHB$"BB@$D$ HHD DB A "!!    ! BD@ @ " "$ " H* >O! NH]H!{4«Ͱ* N̓(Ͱ* N̓CͰ* ##N̓* ~gfͰ* ~ҏͰ* ~ҏͰ* ~ңͰx* ^#VxͰ* ^#V" > E * >P (Ͱ* ##Ͱ]H* ^#V,* ^#V" x-Ͱ* ^#V" > E ʊ* >P }@Ͱ* ##Ͱ]H* ^#VD* ^#V" 6* ^#VE* ^#VZxoͰ!|6* ~=!|*|&)* = x H H*|M̓Ͱ*|&` " B: * " * " * " 4* " V* " * " w* " T* " U* " * " * " * " _ogDM!>))덑o|g = DM!>))3 =+ i`N#Fogo&og_{_z#WR^)* ^#V!|4»xͰ!}6* ~=!}c*}&)* S \x H H*}M̓!}4'* ^#V" xͰ!~6> E : !~4~ڡx H!~6 H* ##Ͱ* ##~M* ~XH * >P H * >P H* >P H- [H* > Ͱ]H!~4* ^#V" ~xͰ* ~ʹ !6* ~=!ڹ Ͱ*& NHͰ*&)* >P œ Ͱò *&)* > Ͱ!4T Ͱ* ~* !6* ~=!* *&)* >P # Ͱ*&  NHͰ*&)* ^#V!4 Ͱ* ~ʦ !6* ~=!ڦ ,Ͱ*& NH1Ͱ*&)* >P ‰ 5Ͱß *&)* > Ͱ!4A @Ͱ* ~ !6* ~=! *&)* >P  dͰ*& NHiͰ*&)* ^#Vm!4¼ nͰ!6* ~=!. Ͱ*&))* N̓Ͱ*&)) * N̓Ͱ* ~ҕ Ͱ*&)) * N̓*&)) * >¸ Ͱ' *&)) * ~ Ͱ' Ͱ4*&$  * Ͱ[H ! }Í COPYRIGHT (C) 1980, DIGITAL RESEARCH, (09/11/81) MP/M-II PIP VERS 2.0DISK READ$DISK WRITE$VERIFY$INVALID DESTINATION$INVALID SOURCE$USER ABORTED$BAD PARAMETER$INVALID USER NUMBER$INVALID FORMAT$MAKE FILE$FILE NOT FOUND$START NOT FOUND$QUIT NOT FOUND$OlPEN FILE$CLOSE FILE$PRINTER BUSY$INVALID SEPARATOR$NO DIRECTORY SPACE$CAN'T DELETE TEMP FILE$JT_fz !3F$NONRECOVERABLE$R/O DISK$R/O FILE$INVALID DISK SELECT$INCOMPATIBLE MODE$FCB CHECKSUM$INVALID PASSWORD$ALREADY EXISTS$INVALID FILENAME$LIMIT EXCEEDED$INTERNAL LOCK LIMIT EXCEEDED$  =.:;,<> _[]INPIRDPTRUR1UR2RDROUTLPTUL1PRNLSTPTPUP1UP2PUNTTYCRTUC1CONNULEOFERROR - $ - $READER STOPPING $RECORD TOO LONG$INVALID DIGIT$END OF FILE, CTL-Z?$CHECKSUM ERROR$CORRECT  ERROR, TYPE RETURN OR CTL-Z$HEX$$$$COM$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$COPYING -$MP/M II PIP VERSION 2.0$REQUIRES MP/M II$1Q"#ͬ :#2l#Ҵd:/s!0!|J 2$ 2Y"l !{#61Q":{#͂:l#2#:!I$6+6+6!m#6#6!Q"6#6:l#%*\/!$6:#5!i#6+6!k#6+6":p#V:p#—O!d":p#r :S"ҋ:d"2\]4!͂Ô"4!ͬ:p#!S"Ҫ O!d":p#!",e"ͬ %!ͬ:p#:o# ͬ!$6":p# $!S" !c"6:p#.ͫ!o#6S:o#/>!o#/HS :o#<2h#bd":p#:o#=H҃ !~$6:~$d"!b"6:p#:S"/Hҹ!o#6:p#> !o#/>HH :b"!:$w:o#<2i#:o#:o#P:o#!c"'!3$6:h# :h# H|ͣ U :h# |!9$6:?$o!?$6:;$|!;$6fͬ:p#–4 d"ͼ$ d":p#:o#,:o# HH :o# 2~$È:h#P:h#:l#2#*I$Mͮ:9$: " *f#}2f$́!"d$ *d$$ *f$ͬ *f$&"f#!g$q:1$d:g$ d:m#Ҵ:g$ ʴ:;$2h$ʣ:h$‹!h$6<:R"<2R"!h$ڣ!R"6 >!9$ү!m#6:-$:g$:h#H#:g$ !R"6*g$M:g$ !m#6!i$q:i$a/>z!i$/H:i$_2i$:i$!j$q:j$A/>Z!j$/HC:j$ 2j$:j$:i#=O>x:3$!-$jHxo>J>!m$6*i#M!  ^#VZ"b#!ڜ *b#*`"~2l$*b##"b#1 1!m$6Vv!#p+q*~#}2x#|2y#!#q:#_  !#p+q*# !#p+q/*#DM:!#6#   ! $p+q*$! $p+q$* $ DM|! $p+q* $DM͌* $DM!$p+q*$DM:$:x#:x#`O! :$DM!$p+q*$~?2$*$DMDM!$p+q*$DM͌*$DM!$p+q*$DM!$p+q*$DM!$p+q$*$ ~§ *$ >wþ *$ >w$*$ DM|*$DM!$p+q*$DM͌*$DM! $p+q*$2l$1:0$P:h#2k$!h#6*l$MP:k$2h#:m$Ң::$p:n#<2n#2m${:l$ 2m$:m$ҢjҢ”> :E$ұ:l$2l$:@$*l$M:7$*l$M :l$>!W":W"=2W"> >>!U" !U"5+N!# ~2n$!T"4G2n$>>!>$H*>$MxE:>$2T"!>$6:V"<2U"!V"6t>!<$p*<$Mxi!<$6!W"6> :n$t:n$!o$q:V"!o$wO!# ~2p$¤*o$&# :n$w>!n$:p$µ!V"4ú!V"6>:$<2$!#> *$&# Nͽ2o# !r$p+q!S"6!p#6+6 !qDM !!$q:!$2$_ *$M *"M *"M !#$p+q*"$!!%$p+q*$$$!'$p+q*&$,!)$p+q*($-!+$p+q**$fDM!N$s+p+q+p+q:N$=2N$ *J$*L$ w*J$#"J$*L$#"L$û !P$p+q*O$"ͬ !U$r+s+q+q+q:S$2{#\ ' "ͼ"? "ͼ$ J*Q$&]) N#F::R$2R$O> d  *R$&5) N#F::>T$! *T$~A=O:!V$6> !V$ *V$&*T$>2W$ ʽ :V$ ¶ .*W$M!V$4‹ !#6͚ ͑ _"|#*|#6/ !"b#4 #6:q#,=:q# !o#6(:q#$(!o#6 :q#<2q#O*q$ :o#w,*q$ 6*o#Me]!p#6:Y"<*q$w-*q$ :$w!s$6>!s$ڐ*s$&,$ 6!s$4u!U"6#6#6!q#6*o#Me:q#ڴ:o#*ʹ͔ͽ2o#à:o#:±:q#*q$#~A<*q$wO>*o#Me:o#[ !$5!p#6ã:q##!{$6#6>!|$ڢ!z$6:z$<2z$O>/:z$!{$O!Y *z$&*q$ Hp9:z$“!p#6ͽ[ˆ!$5:|$2o#:{$2{$!|$4+:o#[®a:q#º!q#6:o#.ͽ2o#Oe:q# :o#* ʹ͔!q#6:o#;1F:k#" :X"=2Y$!"`#\ 4 !"`#\ :X"2Y$!X$6:Y$!X$ھ *b#*`"DM|d"\ :x#ʬ :x#u *y#d" :k#Җ :y#_!͓!*b#"b#*b#"d#*`"6:Y$2X$÷ *`#*b#"b#!X$49 *b#"^"!"b#$ !f#ͻ!}=2\$ :k# !"`#\  !"`#\ !"f#, "L !Z$6:\$!Z$چ :k#K !Z$:\$C !"`#\ K :Z$2Z$*f#$ DM|"q :x#t *y#" *`#*f#"f#!Z$4 \ :A$/!"f#|!Z$6:\$!Z$#"< 2]$*"#""![$6:[$ր!]$ *[$& :[$f#q!$ 2]$![$4  ͽ2o#Oe1:q#*q#&$ *q$:o#w!q#4*q$"!C!j#6:o#[N!$5!p#6 *q$ 6Û!u$q!v$6> !v$ڑ*v$&M :u$Š>!v$4n>:q#<2q#O*q$ :o#w:o#?³!S"6!w$q!o#6?!w$:q#͔ýͽ2o#:o# :o#]H:o#A2x$O>:o# ͽ2o# :o#S:o#QHc:$<2y$ͽ2o#:o# HZ<ͽ2o#çͽ2o#02y$O> }!y$6çͽ2o#02t$O> ڧ*y$&͌!*t$& !y$s}*x$&,$ :y$w:x$>!y$ -*q$ :y$wͽ2o#:o#_!o#6=!}$6>'!}$*f#"f#:]$" !Z$4¤ "q :x#2]$!"f#$ !^$q:^$ ]!Q"4>!/$]:/$!Q"]*h#M! ^#V\"f#!| *f#$ :^$w*f##"f#ààààà àààý*^$&ààààààà*^$&m!_$q:_$ -*_$M9y:?$?*_$M9y:Q"2`$!?$:`$\!?$:`$2`$E!`$:?$w>!`$y!`$5 9d:_$ †!Q"6!a$q:a$!F$wҤ í:a$0O!b$q:b$O͇:b$O͇!c$6:9$2F$:I$'2I$:H$'2H$:G$'2G$*G$Mͮ*H$Mͮ YP!}$4!$r+s+p+q*$~$K*$>*$>H:>*$#"$*$#"$>2o#::$fb#d#!:o#!$6!"6Q2$:ʭ!"6:$§J¢>!"6Ay!$62$Q2$Aý:$>>"$2$:$!$!$52$Ϳ!$&A:$#>>!$p+q:$@!$6*$DMJ:$P!$6#:$ҍ2$k!$6X*"&" :$w <`iwOډ&:$>Q2$0O> ڥ:$0:$AO>ҷ&:$A ͐͐HͿ!$wO`i͵!ͧ!o2$O>E:$   $I$I BII$$BHI$@BI$$I$$BH!$ $BI $"IHDH@ B HBBHI$I"  $"@""A "! H$A "!A@$DB """""!@"BD"DHI$I!!BD "@ A$A$ D"DH$! HH$A$$I""D BD$ H"D$  I$DDII$I %UUUUTD$I I"H@DAH$H!HDI$"B"$"$$H!B$$BB$$@"$$@IH!$!4$/!$6:"!$/:$=O!" NP!$4 P P:$B/*"&" 6$"JJ/k!$6+6>!$ڤ*$&?# :L#*$&$ " w!$5+4w:K#2", "-"ͬ "2c"! :"2""͟:x#:"H!z#6"ͼ:x#2z#:z#:y#H+ *y#" :j#]4 d"!?#ͬ ?#| :x#W!"6Zo, "? :x#:y#HҊ*y#" "͆ :x#:y#³"  *y#" $ !"6!"f#!"d#!r#6#6#6#6#6#64 :j"2j"d"͟:e"!"I$I$I$$$I"D $HH""DA!"@BBB$D!""@BD "BD$$$$" A" D "$"I!! "DHIHDH !! "D$D$BH$"B D$"B" !"H$$I @ I$ !B "B" !  $BBI !$@BDA$$!!$$$"$$A@@@@ HHH!"!HD@!DI$HHD$IBBI$ I! @! I@$!!  HH"I !D$I"HHD$HIB$ @$ $I $A$D HBI$"I!@   B$IDI$I HA$ "DBA$ HB!"I"H"B!$$ $A D!" $I  !r#6:f"!s#6:g"#!t#6:h"0!u#6:m"=!v#6:n"J!w#6$ :=$/:n"Hb!x#6:x#”:y#… d" Ô *y#d" !"6$m"2b"*Z""b#>!>$  >!<$  *f#}Pͬ , "ͼ:x#*y#" :z#u"ͼ:"Y:B$Y(JOYVJJ/"? $ /:"2":"2"" "? ""ͬ " :"!r#2":"#2":"#2":"#2":"2":"#2":"#2":"2"" :,$4 :o"2o"!p"6d" $ !\@@<"ͻ!>~!+!X"s!$"`"@\"!+!"\"6*Z"*\""\"$!Ϳ!$ "`"́!Ϳ!"Z""\":i#!-$2$|:4$!3$ҍÞNڞ*o#MPÍ:$ҫ#::ͫ!k#6!$6>!$+*$&,$ ~$:$:$ H:$H:$H:$H:$H$!k#6!$4¿:k#at[ tO*d#"f#U*^""f# 5:df4 d"ͼ$ d#!:{#“!"$"$4 |!h6\ !"$:x#$$!H*$#"$. í$ :x#>!$ \ :6$/*$ #"$:x#_!#"ͬ "e"ͬ :,$/͵ Hr !"6:"/!=$r :6$h >$!e ZJv *$#"$ͬÓ/!$6> !$ڴ *$&" ~2$ ʭ :$ ¦ .*$M!$4~ 4 !p"6?d" :x# :x#_!#e"ͬ :o" !p"6$ >. $ >!":"!d":"H$! :o# 3! !$p+q%!e"*$DM#ͬ !d":p#:o#=Hp! _og_{ozg^#V))) DM!>))Ң! =š!_{ozg^#V) µ!^#V|g}o ¿!_{ozgi`N#Fogo&og  ?`~"Invalid list number, ignored $19:] 62[]Q2[?02HH"A*A^#V"A"C^#V"`>`!b6:b*b& *`>*b&E HҴ!b4:b*` >:[Hw!"`*` ^#V"`n2[ [͍ MM 6v!:p+q*9 ";*; ~!>p+q*=~0w Ҋ*=#~ ʅ*=n&*=#~0_}*=~>!@p+q*?~ Ҭ*?>0w*?#6 þ*?~ 0*?#w*?61^#V))) o&ogHD0XTmpx List Number = xx $ $B$H@@ @@ I$B @$ @H1  c $HH D@DB"H$H$I "I@$HI$B$$IHB@HB@HB@B@I $HI$%A~Error during writing COM output file.$Unable to read header record.$Unable to read header record.$Bad data record in PRL file.$Input file must be specified.$PRLCOMInput file does not exist.$ Destination file exists, delete (Y/N)?$ $1ͩ1 @#*DM#v!"!!p+q* ! p+q* ! p+q* !p+q* !p+q*!p+q*!p+q*!p+q*!A q!B 6:A =!B *B &r@ DM͓s2!"!B 4¬@͓\c2!)"͓\c2(!G"*A͊"!6>͖ʓ*&r@ DM͓\c2s!e":<2‰ͣ!6*+"<:ʢ*MͣC:] º!":e .e -:m . l\ -:u .u - .l - \3&!"!|63f#2:y:YHcSf̓!?6DM!>))ҁ =y^#V|g}o Šo&og?  j A XRA ORA CMP INR DCR MVI LXI STAXINX DAD LDAXDCX RST PSW POP PUSHNZZ NCC POPEP M B C D E H L M A B D H SP PSW ??= m |}âêÃQ  l ê C "*.^#V"!"!r+s2*$" ""?"1!++"" ͢%¢͢##~2.D^#V!^#V!~0o`6#6*.]~ 2 *Ï 1 F*.s#rͺ >-l Q ͂ 2AF F _!p^#VF VF  v F F  " F F F f a q F F *.[6\͢ F C=F " 2 F C" ="=F > 2l}GCOPYRIGHT (C) 1981, DIGITAL RESEARCH [MP/M II] DDT VERS 2.0$10 !~=W!xo ~#bbxʑ {„~#o}oҍsx.22CF >}* N#F GzW{_ 7 xPw2/w2Cue"=u=F Æ*}o҆!"ͺ 2*" j ~ͪ # گ}›"*j  *}¹|¹* 2ÉCF {z|F 2}x2ͺ CDM< * "=< M =< YPM 1**!~4h #~#F#h xh ~#s#r#w:CF ͺ  j ᯕo>g 2*" *.\"  ͢|F *.|w>2A22 w#|2 *.e~H#~E#~X*?}Ã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!ͷ| "?! >>F *N#FxC ~% w$#2 bx2 {Y ~#o}ob H :AF C!} =F 2A*ͤ͢F $*\͢2 * w# ¹  ß F : W _  O { `i"2    w#   F  GтWx!V ~A l #5 ͺ *? j * 2 NEXT PCC=F ͺ j ~ͪ j Q ͂ ʢ .2F=F |F }w#k ì >2C! =F }F +" C2 =F *${ozgF }|o>gͺ 2͓Q͌Q!.ͷ6y#G͙Qà!2ͷQ͓͌Q!>ͷq eg͙Q:zJEËC–EQyQxQRQ** {zҷ*~#" <AOGƐ'@'OxƐ'@'ON# z8O!B N#N ¾SP.* |} !9":q!" Ag} 2 |F }!w2ʹs#r2*.[~' _*.~A *.[4B *\͢A *.[w 7ͺ >?l 2>  W  ͢!"> _͢a_!~> ʙ 5*~#"y ҥ 0l 7l ͛ Û > l > l  ͢|ͪ }ê  l >.l } 7*}o|O=!9 Ÿ!6q!2qC J R q!z z=naO $q$,!;,!Ù!;qz8O! !;,z;qyO! ͣͣW_͕qyO! ͣ͒qyO!b q!vz͒q.?*!9"8"͉Z*" +*'/7?v"*2:EI SPHLDI XCHGPCHLXTHLRET HLT CMC STC CMA DAA RAR RAL RRC RLC NOP CPI ORI XRI ANI SBI IN SUI OUT ACI ADI CALLJMP LDA STA LHLDSHLDMOV ADD ADC SUB SBB AN  , 0 F ^#V#! ))))o͂ $s#r#!4͂ !6# ʈ,a>2d 8 ʈ͂ 8 ʈ͂ 8 F F !vXN!~͖ ʱé!q_^!ʹ^#V~l xͦ͛ >=l !~ͪ  !fͺ #x j j ; 9*" !6b+"*~ͪ # bj ^^#V b~ͪ CZMEIABDHSP!""+"!91*:~!~6ʺ=G#^#V#~xé#"!N#F{*>7 *|+" :; ] {>*l * " *"2 !~##7*Z*F#$!s!R^#Vnnẗ́͏::^#V#z*^#V̈́ʣ>:x´8_*zt͏>><7"C 2͕%>20ɯ202!0~@ 6^4#:[0w~$w:[00 (n @!!BH @@ABH B! "BHI$$BI$BI $ HI D$HD$$ H B!$D$p="$B$DA!ABI$H B$I $HI$H$! $I $I$D@ $I$ UUUUUUP@ "I$H"HH$D!H$I I$DH$BD@I$A" A@D $$$$H HBH !HBI$"A HI$$H$B"BBA$ I"H$DHDDH@$"" D@$@BB$ NHI! @@!H"$B$ $"$@B" $B$$I$@B UUTH@@!!$ ( BB@ K,~ Not renamed: $ Drive Read Only$Invalid Wildcard$No such file to rename$ BDOS Bad Sector$Currently Opened$Password Error$already exists$Password ? $, delete (Y/N)?$Invalid File$Requires MP/M 2.0$1")*)}0*)|H͸ÌE!"!\v   ""<"T:*#"!"<". -2`JA:\q:j!:\gAq*~2Y~ÌBʌv!q*&!p+q*   !p+q*!p+q*!p+q*!p+q*!q*&-" ͨ ͨ! s+q+p+q: =2 ʆ* : w* #" i! q: œ6͸3: ­M͸3: ¾͸3: ͸: _͸: p͸: ͸:  %wECIFIED DRIVE ENDIF FILLNAM FN,8 ;;FILL FILE NAME ;; NOW GENERATE THE FILE TYPE WITH PADDED BLANKS FILLNAM FT,3 ;;AND THREE CHARACTER TYPE ENDIF FCB&FID EQU $-12 ;;BEGINNING OF THE FCB DB 0 ;;EXTENT FIELD 00 FOR SETFILE ;; NOW DEFINE THE 3 BYTE FIELD, AND DISK MAP DS 20 ;;X,X,RC,DM0...DM15,CR FIELDS ;; IF FID&TYP<=2 ;;IN/OUTFILE ;; GENERATE CONSTANTS FOR INFILE/OUTFILE FILLNXT ;;@NXTB=0 ON FIRST CALL IF BS+0<@SECT ;; BS NOT SUPPLIED, OR TOO SMALL @BS SET @SECT ;;DEFAULT TO ONE SECT͸3!p+q!6> !A: ).ͨ*&*>Oͨ!4!p+q.**DM -Y#*DM"#*}Ÿ*|2:қ*M͇:>!q:aڼ:{Ҽ: :Q͸ \!6>!R͟O͢2 *& :w: QR::=:*:=2O! 6 :H3:<22!6+6> !ڪ*& ~? *&*~?ʛ͸%͸3à!6:<2a:!p+q*:w!6> !*& ~?*&**&* w:<2OR ELSE ;; COMPUTE EVEN BUFFER ADDRESS @BS SET (BS/@SECT)*@SECT ENDIF ;; ;; NOW DEFINE BUFFER BASE ADDRESS IF NUL BA ;; USE NEXT ADDRESS AFTER @NXTB FID&BUF SET BUFFERS+@NXTB ;; COUNT PAST THIS BUFFER @NXTB SET @NXTB+@BS ELSE FID&BUF SET BA ENDIF ;; FID&BUF IS BUFFER ADDRESS FID&ADR: DW FID&BUF ;; FID&SIZ EQU @BS ;;LITERAL SIZE FID&LEN: DW @BS ;;BUFFER SIZE FID&PTR: DS 2 ;;SET IN INFILE/OUTFILE ;; SET DEVICE NUMBER @&FID SET @NXTD ;;NEXT DEVICE @NXTD SET @NXTD+1 ENDIF ;;OZq2͇::o&"!* ^#V"#* ^#V"%* ~2 *!DMͮ*!DMB2ž*DM ͸͖O͢Y›*DM*!DMB2Þ:¼*!DM *!DMB2:*!DM Q*DM=ͨ*!DM* *#s#ri* *%s#r* : w2!(p+q͸*'DM ͨ*M͇͸͸3_{ozgi`N#FogL~êIllegal time/date specification$;Zx0NSun$Mon$Tue$Wed$Thu$Fri$Sat$Resident portion of scheduler is not in memory$Scheduler queue is full$1df!c"tf!"t1d*tDMv!ep+q*d E  HI$H"DB@A"HHIH$"  DDDD@@" " "$D$I $HI!$ @H $$HBBH "IH@@I$"HD "DBD@H$$$$$ $HBBH!! IE 1 ;;ASSUME TRUE TO BEGIN WITH IRPC ?C,FN ;;LOOK THROUGH CHARACTERS OF NAME IF NOT ('&?C' = '1' OR '&?C' = '2') @C SET 0 ;; b!{q:z<2zO*x :{w!}p+q*|~$M*|:z<2zO*x w*|#"|%!~q:~0O!q:ON:ON!q*M\:!q*&! ͕KN*&! ͕MN!q*M͈/::z!6:z<2zO*x ~2: ;:0 !s+q!6]:,::H2E:0!wW;!:#~!Hw:!s+q+q!:ʖ;*M*!s+q:2:*&/) >;H:=:*! ͕!s*͗":!iCLEAR IF NOT 1 OR 2 ENDM ;; @C IS TRUE IF FN = 1 OR 2 AT THIS POINT IF @C ;;THEN FN = 1 OR 2 ;; FILL FROM DEFAULT AREA IF NUL FT ;;TYPE SPECIFIED? @C SET 12 ;;BOTH NAME AND TYPE ELSE @C SET 9 ;;NAME ONLY ENDIF FILLDEF FCB&FID,(FN-1)*16,@C ;;TO SELECT THE FCB JMP PFCB ;;PAST FCB DEFINITION DS @C ;;SPACE FOR DRIVE/FILENAME/TYPE FILLNAM FT,12-@C ;;SERIES OF DB'S ELSE JMP PFCB ;;PAST INITIALIZED FCB IF NUL DN DB 0 ;;USE DEFAULT DRIVE IF NAME IS ZERO ELSE DB '&DN'-'A'+1 ;;USE SP q*&! ͕))))*&͗ } =2:2D!6Q*&# ~2/*{2/cN{2:!:HҎ*&/) :N_!mʹ͍*& Nͥ*M*ͥ_*v#q#pO*v w:;{O*v w*v~,:: :;{2*v 6B:;{O*v w!s+q:!!6N>Ҙ!m":v!n"ڃ+s#r!4Z!6 >!:=2Ҹ!6*&/) :͉!Þ*v ~2*v ~2*v ~2*v#^#V"+WSAGE CALL @BDOS ;;PRINTED AT CONSOLE JMP FILERR ;;TO RESTART MSG: DB CR,LF IF MD=1 ;;INPUT MESSAGE DB 'NO &FID FILE' ELSE DB 'NO DIR SPACE: &FID' ENDIF DB '$' PMSG: ENDM ; PUT MACRO DEV ;; WRITE CHARACTER FROM ACCUM TO DEVICE IF @&DEV <= @LST ;; SIMPLE OUTPUT PUSH PSW ;;SAVE CHARACTER MVI C,@&DEV ;;WRITE CHAR FUNCTION MOV E,A ;;READY FOR OUTPUT CALL @BDOS ;;WRITE CHARACTER POP PSW ;;RESTORE FOR TESTING ELSE CALL PUT&DEV ENDM ; FINIS MACRO FID ;; CLOSE THE FILE(S)N!͕!sU!6:>;!H4!6͙*&/) :͉!s+4:O!G DM *Mͭ*Mͭ*M͈ *Mw*Mw*M\!p+q!"r*"v "x*v~!z6U*v~~H!z6*x~2"*z&*x"r H22!{6{͛rʄ!6 *r#"r!>?*rDM +|e*|":~2:2Ç_ogDM!>))덑o|gҮ =œDM!>)) =»_{ozgO{ozgi`N#Fogo&og_{_z#W;}p SDIR V1.0 Copyright(c) 1981 Digital Research Box 579 Pacific Grove, CA 93950 getnxt: vector = $ getnxt: vector, i, mask $ SDIR EXAMPLES sdir file.one (find a file on current user and default drive) sdir *.com d:*.pli (find matching files e4Sched :  I$$HHA" AH" DB"BAB!$@ "@II D$ B!""$D I$ """ @A$ A!D"D$! DH$"BBBH$H $DH !$HDDA$$$"$"I$ B @on default and d: drive) sdir [rw] (find files that are read/write) sdir [ro dir sys] (same for read/only, directory, system) sdir [xfcb] (find files with XFCB's) sdir [nonxfcb] (find files without XFCB's) sdir [exclude] *.com (find files that don't end in 'com') sdir [nosort] (don't sort the files) sdir [full] (show all file information) sdir [size] (show name and size in kilobytes) sdir [short] (show just the file names) sdir [drive = all] (search all logged in drives) sdir [drECK MOV A,L ;;0000? ORA H MVI A,EOF ;;END OF FILE? RZ ;;ZERO FLAG IF SO LDAX D ;;NEXT CHAR IN ACCUM ELSE ;; STORE NEXT CHARACTER FROM ACCUMULATOR POP PSW ;;RECALL SAVED CHAR STAX D ;;CHARACTER IN BUFFER ENDIF LHLD FID&PTR ;;INDEX TO GET/PUT INX H SHLD FID&PTR ;;POINTER UPDATED ;; RETURN WITH NON ZERO FLAG IF GET RET ;; PSUB: ;;PAST INLINE SUBROUTINE XRA A ;;ZERO TO ACC STA FCB&FID+12 ;;CLEAR EXTENT STA FCB&FID+32 ;;CLEAR CUR REC LXI H,FID&SIZ ;;BUFFER SIZE SHLD FID& ive = (a,b,p)] (search specified drives, 'disk' is synonym) sdir [user = all] (find files with any user number) sdir [user = (0,1,15)] (find files with specified user number) sdir [length = n] (print headers every n lines) sdir [ff] (print form feeds between headers) sdir [message user=all] (show user/drive areas with no files) sdir [help] (show this message) sdir [dir sys rw ro sort xfcb nonxfcb full] d:*.* (defaults)$ In User option$Illegal Option or Modifier$File Spec Limit is $Illegal G8LEN ;;SET BUFF LEN IF MD=1 ;;INPUT FILE SHLD FID&PTR ;;CAUSE IMMEDIATE READ MVI C,@OPN ;;OPEN FILE FUNCTION ELSE ;;OUTPUT FILE LXI H,0 ;;SET NEXT TO FILL SHLD FID&PTR ;;POINTER INITIALIZED MVI C,@DEL LXI D,FCB&FID ;;DELETE FILE CALL @BDOS ;;TO CLEAR EXISTING FILE MVI C,@MAK ;;CREATE A NEW FILE ENDIF ;; NOW OPEN (IF INPUT), OR MAKE (IF OUTPUT) LXI D,FCB&FID CALL @BDOS ;;OPEN/MAKE OK? INR A ;;255 BECOMES 00 JNZ PMSG MVI C,@MSG ;;PRINT MESSAGE FUNCTION LXI D,MSG ;;ERROR MES lobal/Local Drive Spec Mixing$Only One Set of Options Allowed$Illegal File Spec$ in user loop $File Not Found.$1:|2:}2:.2:;P;\ P;G!Z;6R;.::V;:Z;½$ 44I:V;@V>44IØF!=";1;u 2:;*:;M*-;"];!"/;-;u 29;!+;6>-;6:t!\6?\ͷ 2a;!"_;:a;U*_;#"_; 2a;=*_;#DM͑&*_;) !D:t!+;6!,;6!"/;:9;::ҔP44*9;_;*/;_;ͨ9>::3;:+;/!,;H͞%!,;6!;6:8;,)m2-;u 29;*];"-;:1;6:®!a;6::=!a;ګ *a;&9:  ~‡ *a;&9:  ::;w *a;&9:  ^1;:a;<2a;L !a;6::=!a;  *a;&9:  ~ *a;&9:  ::;H44I:a;<2a;³>-;6:"@_-;buff = $ state8, char = $ state7, char = $ state6, char = $ state5, nxtchar = $ state4, char = $ state3, char = $ state2, char = $ state1, char = $!d;q*d;& ; ; ;!i;s+p+q+p+q!i;q>g;6:WGH `44Iv o&!;;q*;;& ::\d!<;q:<;0/>9!<;/H!A;r+s+q+p+q*@;>w#6!"B;}2D;:?;!D;!D;:?;O*=; Ne>*@;!D;:?;O*=; ~0_*B;9͛9+s#r!B;9+s#r#4Ÿ>!G;s+p+q:G; *E;>9+s#r3 *E;*G;M! :9+s#r!I;p+q!J;6:J;!H;ͧ9>:Hq !H;:+s#r#4? :J;!L;p+q::җ R44*K;N#F'ͷ4*K;N#F4 2M;O>ҭ >!"N;>!M; *M;M!N;:+s#r*K;N;O:s#r:: f44*K;N#F'ͷ4N4*M;&*e;*g;Ͱ9!j;s*e;Ͳ9"e;PY! Ͱ9"g;>:!i;#~HFT!i;6:j;0O;!k;6# *k;& ~~!k;4h*k;& 6$ *k;& 6!m;p+q!n;6*n;&*l;~ ~ H!n;4è:n;!o;q:o;[:o;]H:o;(H:o;)H:o;=H:o;,H:o;H.y>!q;p+q!v;6*p;#DM͝2u;O>x*p;~!u;:9+s#r! *T;#~E’ >:9+s#r! *T;#~F *T;##~F¯ !7;6 *T;##~U !3;6 L! *T;#~H  ! *T;#~M !6;6! *T;#~N, *T; ~X >@:9+s#r) *T; ~S& !8;6) L! *T;#~PF >:9+s#r! *T;#~Sª *T;##~Yk >:9+s#rç *T;##~H~ !3;6ç *T;##~I‘ !3;6ç *T;##~O¤ !8;6ç L! *T;#~R*T;##~OH >:9+s#r! *T;#~R*T;##~WH >:9+s#!v;z*t;&*p;~"p*t;& *p;~"_*p;~!t;7*t;&*p;6 *t;& *p;"r;>!t;:t;=O*p; N:u;!t;O*p; NH*r;+"r;*p;~<:u;!t;=Oo:u;!t;O*p; DM*r; -*t;&*p;~"0!v;q:t;<2t;}:t;=O*p; ~ X:t;=O*p; 6:c;bX!x;p+q!y;6*y;&*w;~*y;&*w;~a/*y;&*w;>z/HҼ*y;&*w;~ *y;&*w;w:y;<2y;n!;q:;0/>9!;/H!;q:;A/>Z!;/H:~;<2~;Or! *T;#~X > :9+s#r! LP;GC*T;#~Lz P;G:V; t *T;#*W;M4;}n >4;6:e LP;Gq Lw LC*T;#~U} ::ґ 44P;G:V;:: HҲ L:V;R;.:Hz *T;#~A*T;##~LH !"-;q :V; :W;Hn :W;$ *T;#~02[;D *T;#~0o&9*T;##~0_![;s:[;/>![;/Hh *[;-;k Lq LP;Gò C*T;#~D*T;##~R~IHH@P;G:V;· L:V;R;.:H=*T;#~A*T;##~LH !"1;71; *|; ~2;*~;& *|;~2;!;q*z; D:C:;<2;O*; :;w!;q!;6*;M/:;$Hi:;*;M*;MH:;_H:;$H:;!;/HҸ*;M:;<2;i*;M*;MH:;_H:;$H:;<2;ø*z; 6*z; :;w:;!;q*;M*;MH:;*H:;?H:;_H:;$H!;q:;!;w*;M !;:;H:;*:;2;*~;&";*;M Ҥ:;<2;Ì!;:;ڹ*;!~;s>!;6!;:;+?:;<2;¾*;!~;s*;M\y!;6> !;9+s#r4*T;#~A/>P/H1*T;#~A_1;4LP;G÷ CL$ !Z;644I:: *. *T;# *:&9: -x *:&9: ~  o& 9:  ~ H *:&9:  6 *:&9:  6*T;~ *:&9:  6 *T;~= *:&9:  Hq::<2:?44 dͷ4T4P;G>:ͣ9>:>:ͣ9>:HҀ>:9>9":>:ͣ9>:>:ͣ9>:HҺ>:9>9":> :ͣ9>:>@:ͣ9>:H:3;!3;6>@:9> *;&*;6 :;<2;:;:R:;A/>P!;/HL:;AW*;M:;$H:;_H:;*H:;?H/ҟ*;~Ÿ>P/Ҭ>:;.*;M !;6P/>*z; 6 *z; 6@y!;q*;M/>*;M*z; :;/H:;H?*;M*z; ~<*z; w:;H:;DH:;BHҐ*z; ~!;ҍ*;M*z; ~<*z; wÐ>*z; 6 y!;q:;\ʭ>:;\:;H*z; ~ H*;M*z; ~<*z; wð:;\:;o;6:2":;!,;>-;6:H2"*;/;!;6::=!;" *;&9:  ~::;H" *;&9:  ~•">:ͣ9>: *;# *;&9: b!">:ͣ9>:!;47">:ͣ9>:!;6!;6> !;##:;2;"#*;&*;>!;w":9;!;wwO!< ";O!< ^#V";!;6>;6::;/Hң#*;*;> *;#*;#b!Hҋ#!;6à#*; ";*; ^#V";C#>;6:²#>>"R$.*;;9:#>*;";";*;#";. *;#*;# -#*;>H:;\>*z; 6y:~;2;>y:;=2~;!;6 Ds ͞/s /s>y:;,:;)H:;HҪ*z; 6y,*z; >*z; wy> DO>*z; >*z; w*z; > *z; 6 y>:;,:;)H:;H6*z; 6y,Q*z; >*z; wy>:;i*z;Tq#py*z; 6*z;##q#py:c;ҕ+ *;M;:;¡T:;]:;,:;(H:;)H:;T͋:; :;,H*;w *; >w#6*; w#6*; w#6*; w*; w#6*; w#6*;*;s#r*;>$*; ;.:":y$> ;.:+s#r.*; *; -˜$ *; *; w*; *;s#rÛ%*; *;  *; *; ~O`i :n&͗5 *; *; ~*; w!;6*; >A:'%!;6!;6>!;ڛ%F%:;!;w,%Û%*;&*;n&";:;x%*;& *;~;9+s#r>;6:ʘ%*;  *; !8%>*;";!;6>!;%*;&<) >w#6:;<2;©%*"; !;6!";";!\6?\ͷ 2;:;V&:;͝͝:c; = *;M;:;,T:; :;,HN`]:;)]>:c;vO *;M;:;Ҕ*z;`q#p *z; 6yx2;Ң >:c;һa *;M;:;(`:;*z;q#p *z; 6yx2;>;:c;v *;M;:;T3:;!9w!9~,~ HE͝3!9~]Š:;(:;,H:;)Hx3:;…T3͋3!9~=™ͥ3>3:c;ҳ *;M;:;*z;q#p *z; 6y*z; :;wO>>2;>:c; o&";*;~J&*;#";*;~ 4& *; ~2;J&ͽ!J&Ͷ#/J& 44 2;% Sort Stack Overflow $ Not enough memory for sort $!;p+q*;))))*;)) *;) *; *; !;r+s+p+q!;6> !; '*;&*;>2;*;&*;>2;H'!;:;!;4&>!;r+s+p+q!<6*;";*;";:< )*<&)); ^#V";  ^#V";!<5;;):)*;";*;";*;*;:)*;N#F͑&";;;):x(*;)*;N#F͑&";*;DM*;;&'*;#";*;)*;N#F͑&";é'*;)*;N#F͑&";*;DM*;;&(*;+";*C *;M;:;):;H>:;1T:;=2; :;[M͝:; :;,H:;(H҇:;(€:;<2;͋͋:c;ҡ *;M;:;ҿ *z; 6*z;q#py:;(:;<2;ÿ*z; :;wO>>2;>:;T:;)>:;(':;<2;͋:;[6͝2;D>!;p+q*;"z;*z;##^#V"|;*z; ^#V";!~;6!;6!;6 *z; 6*z; 6*z; ~*z;D:³2;& *z;D:͋2;& *z;D:͝2;& *z;D:ͥ2;& *z;`D: ;)*;N#F͑&";';;):u(*;)*;^#V";*;)*;*;)*;N#Fq#p*;)*;*;s#r*;#";>!;A:u(*;+";Ë';;):;;):":(;;):(!<4n&)); *;s#r*<&))  *;s#r*;";);;): )!<4n&)); *;s#r*<&))  *;s#r*;";W'+':<&)W&44+)!;6*;";>;6:B);;)::!;D:a)p&44!"<*;+!9!;/H!;r+s+p+q*;;͋9s#r*;.:a!*;.:+s#r*;N#F+q#p7!!;r+s+p+q+q!;6:;=!;ں!*;&*;>*;&*;>H~?Hҳ!>!;4v!>*;>2;!9;!:+;!>!";*;;*-;;ͨ9>:!>>- ^ Update $ ------ -- --M$ Access $ Create $Sys$Dir$RO$RW$Read $Write $Delete$None $ $Directory For Drive $ User $: $k$Illegal Format Value$Total Bytes = $ Total Records = $ Files Found = $ Total 1k Blocks = $ Used/Max Dir Entries For Drive $File Not Found. $ $*; ^#V <͗5 *; >A:q+ <͗5*; #<5*; ^#V")t<*; ~2+<)<5)<&<5*; >ͤ9>:+&<͗5*;#DM_4N4*; N#F'ͷ4k$4N4*; DM)5N4T4-4+44 #4!<6:7;#4F+44!;!@<ڋ4*@<&*><>O$4!@<4j4 $4!@<6> !@<ڶ4*@<&*><>O$4!@<4•4!EC<6:(5*A<*C<Ͱ9!F:!E<#~H5N4%5!E<6:F<0O$44!JA:~-N4*; ^#V"; >,c*44-*; >@,j*44-*; > -q*44-x*44N4*; ~*; ~HO-*; DM:9U-*44N4N4*;~*;#~H~-*;DM:9:7;Ҏ- $4Ø-:/<ژ-T4*44::;AO$4:$4:: -*44*9;& ͷ4T4!"-:'.*-<*4;Ͱ9>#~2X<*V<##~w*V<:+s#r*V<#:X;6:HO7:h<=:h<*i!m:Hu.>:2<ր::4<ͣ9>:HҜ.>>!6 *; *; ~`i/H?/ͽ!?/*;#DM͟.?/*;#DM- 27<.!:<6:;Ң/::<ڟ/;8<):ґ/*8<)*;N#F͑&";*8<#"8<*;:9;2:<Ü/*;";!:<6U//::;!i !<ڈ9*<& < N$4:<<2))덑o|g9 =·9^#V))) DM!>))9 =9_{ozg_o(; >A:> :ͣ9>:H+D:>@:ͣ9>:HH*;#DM͟.Hz0I+*;#DM-*; N#F'ͷ4*44I//!,<6;;):ʅ1*;#DM͟.1*<*,<&Ͱ9>:l1*-<*4;Ͱ9>:_1T4-T4)44:;/*;;9:H;8<):!;H1N4)44T4)44:;/*;;9:H;8<):!;HP1N4)44T4*-<###"-A:> :ͣ9>:H+D:>@:ͣ9>:HH*;#DM͟.Hf2*<#"<*-<*4; g^#V) :^#V|g}o :_{ozgi`N#Fogo&og_{_z#Wi`N#Fog9B3D444D11813DE6 :103A5000E10A1203132DC2513A01803CD921FC :103A60009D3D36003E0D219D3DBEDA883A2A9D3DA2 :103A700026000106000901803D094ECD24353A9DFE :103A80003D3C329D3DC2643AC969604E23461A816D :103A90006F13881600EB1A856F131A4C :10\C9EB5F16EB1AA56F131AA467C9E0 :103AB000444D2100003E10F52EB9729EB8D916FC5 :103AC0007C986713D2C93A091BF13DC2B73AC95E67 :103AD0002356EB29E52929C109C9444D2100003E9F 9>:P2T4-T4)44)44:;@323*4492D*44T4)44 *44*-<##"-!3;Ҵ2*44I*3;M!3 ^#V.3/3:;> :ͣ9>:>@:ͣ9>:HH3́03͆13222>!4;6:*-<4;9:H!7;f3 $4 $4l3T4T4*44 <)5k$4*44 #<)5*44*<ͷ4*44&<)5+44::;AO$4:$4N4*;ͷ4/$4*; N#Fͷ4><6:4:6; 4 {@] :103AE0001029EB29EBD2E93A03DC2E13AC95F1648 :03AF000007BB56F7AB467C9EB5F1600EB1AB56F40 :103B0000131AB467C95E2356EB290DC2093BC95E7F :103B10002356EB7CB71F6 V$HI$BI$$I$$I H I@BBD$ $!I$BI@"H"  D@"I A @!$@H H$$  B@HB@HI I HH@$ ! $H@*|; ~2;*~;& *|;~2;!;q*z; D:C:;<2;O*; :;w!;q!;6*;M/:;$Hi:;*;M*;MH:;_H:;$H:;!;/HҸ*;M:;<2;i*;M*;MH:;_H:;$H:;<2;ø*z; 6*z; :;w:;!;q*;M*;MH:;*H:;?H:;_H:;$H!;q:;!;w*;M !;:;H:;*:;2;*~;&";*;M Ҥ:;<2;Ì!;:;ڹ*;!~;s>!;6!;:;+?:;<2;¾*;!~;s*;M\y!;6> !;C$HH"I$H$@HD@B@"$I$I@H@  @H $I$H$B@ "IH$  BBBBBB@"B"H$H$D$H"@  @H$D@$!!!D B D! DD@@  AA"H $@! HH@@"H$"DB$DDD"B!  @$""@   "B$@$$"DDBD$"HH$BD@@$DHA $B@  HAAK @DHI!H B! @@  @$D ""@ H*;&*;6 :;<2;:;:R:;A/>P!;/HL:;AW*;M:;$H:;_H:;*H:;?H/ҟ*;~Ÿ>P/Ҭ>:;.*;M !;6P/>*z; 6 *z; 6@y!;q*;M/>*;M*z; :;/H:;H?*;M*z; ~<*z; w:;H:;DH:;BHҐ*z; ~!;ҍ*;M*z; ~<*z; wÐ>*z; 6 y!;q:;\ʭ>:;\:;H*z; ~ H*;M*z; ~<*z; wð:;\:;l!"D"BD D$$$H!! @ $!!$I D $$DHHBDD$H$BH A$ H$I$$DII$I$$@D $HA@ H$@@@A I H"HDA A !! ! H@D$ !$B $@$ !""HIB$   D$@!AH@$$! @A H@I$$$$$@@@ D I$$$I$D$B!IB"D $BBB!$$"I$BI$BI $D$!IBI@@ !$!HAH H:;\>*z; 6y:~;2;>y:;=2~;!;6 Ds ͞/s /s>y:;,:;)H:;HҪ*z; 6y,*z; >*z; wy> DO>*z; >*z; w*z; > *z; 6 y>:;,:;)H:;H6*z; 6y,Q*z; >*z; wy>:;i*z;Tq#py*z; 6*z;##q#py:c;ҕ+ *;M;:;¡T:;]:;,:;(H:;)H:;T͋:; :;,HI$$H BIHIII@@II$D$$H AH$$I!$D"BAD@ BI! @@HDII!HBH  HHIA$ H@ I$"$@$DI D@"I$HHHB@"B$I I$I!$$$$B$I !H@$BB! $A!$I $@!"I$" "$H A$! DD@$H"@D @B @$$B"@@$ $H H@D H$D"!A@@HDA H"H!"H @@DH@@HHBI BD"A" @$$ !@  ͝͝:c; = *;M;:;,T:; :;,HN`]:;)]>:c;vO *;M;:;Ҕ*z;`q#p *z; 6yx2;Ң >:c;һa *;M;:;(`:;*z;q#p *z; 6yx2;>;:c;v *;M;:;T3:;!9w!9~,~ HE͝3!9~]Š:;(:;,H:;)Hx3:;…T3͋3!9~=™ͥ3>3:c;ҳ *;M;:;*z;q#p *z; 6y*z; :;wO>>2;>:c;  @*p;DM͝2u;O>7*t;&*p;6 *t;& *p;"r;>!t;:t;=O*p; N:u;!t;O*p; NH*r;+"r;*p;~<:u;!t;=Oo:u;!t;O*p; DM*r; -*t;&*p;~"0!v;q:t;<2t;}:t;=O*p; ~ X:t;=O*p; 6:c;bX!x;p+q!y;6*y;&*w;~*y;&*w;~a/*y;&*w;>z/HҼ*y;&*w;~ *y;&*w;w:y;<2y;n!;q:;0/>9!;/H!;q:;A/>Z!;/H:~;<2~;O C *;M;:;):;H>:;1T:;=2; :;[M͝:; :;,H:;(H҇:;(€:;<2;͋͋:c;ҡ *;M;:;ҿ *z; 6*z;q#py:;(:;<2;ÿ*z; :;wO>>2;>:;T:;)>:;(':;<2;͋:;[6͝2;D>!;p+q*;"z;*z;##^#V"|;*z; ^#V";!~;6!;6!;6 *z; 6*z; 6*z; ~*z;D:³2;& *z;D:͋2;& *z;D:͝2;& *z;D:ͥ2;& *z;`D:W!6x :H:":,ͳx :W9R*"0!6!6W!6y " v!+q*+& h!-p+q*,~ʞ*,Nh*,#",Ä  h h͟;~!/p+qͨ*.DM~ !0q*0&!2p+q*1!4p+q*3!6p+q*5 !7q*7& !9p+q*8#!:q*:&-!<p+q6 *;"=!@p+q6 *?d!Aq*A&e!Cp+q6 *Bf!Ep+q6 *Dg~: Copyright (c) 1981, Digital Research 08/09/81SET 2.0 File not found or no directory spaceInvalid [protect=on]Directory Label attribute set read only (RO)read write (RW), set to ERROR: READWRITEDELETENONETime Stamps ON on of"F!Hq*H&) ^#V%ͨCS/jAy!Sp+q>ͻ© *0DM~ñ *4DM~~`*RDM~ : ͆ ͆ 0"TTͳ R >TͻM *T~[ !6) *T~]) !6*T#"T~,= *T#"T*0+"4*T"0R !6*T>ͻe "!Ys+q+p+q:Y=2Yʖ *V:Xw*V#"Vy !^s+p+q+p+q:^=2^ *Z*\ w*Z#"Z*\#"\æ 2_a :_{ :_ :_  l !`6f Unsuccessful FunctionLabel @ @RWRODISYARF1F2F3F4AttributeOFONREWRDENOModeOFONValue, Use ON or OFF?Directory Passwds Make Stamp Stamp Stamp Label - Reqd XFCBs Create Access Update -- ------- ------- ------- ------- ------- Aborted SET EXAMPLES FOR FILES set *.asm [rw, dir] (File Attributes)set *.prl [ro, sys]set *.dat [archive=on,f1=off,f2=on,f3=on]set *.asm [time] (Time Stamping on ASM files)set}>!`p 2a " *`& :aw:a - p :a8 :a^ :`K :`=2`O! 6 :ai  !`4 ͟2a:+AOh:hw !b6> !bڼ :b ¤ .h*b&*I>Oh!b4Ž *.|2c w x:c ~:c '~~ ~:c ~:c .~:c* ?~!dq:dr *F ^#V"*F ~2*F ^#V":do&"I:\w!gs+p+q!i6!k6:g!k !j6!h6>!h *i&*e*h&k  !j6!i4+4™ :j :k!k4… *i&*eDM͆ ls  >>! *.asm [password = xyz] (Password Protection)set *.asm [protect = read] (read, write, delete or none) FOR DRIVES set [password = xyz] (Label Password)set [protect = on] (Password Protection)set [update = on] (Update Time Stamps - on or off)set [create = on] (Creation Time Stamps - on or off)set [access = on] (Access Time Stamps - on or off)set [make = on] (Make XFCBs - on or off)set [default = xyz] (Default Password)set a:[rw], b:[ro] (Drive Status) ?Para lq~:lN~Q~~!w6l~~ ͝JU~Pb~r~ ͝n~~t~ hA ͷ1ͷ2ͷ3ͷ4ͷ!mq*m&*I~Ҵ>>!os+q*nM͝*oMh::6 \ O+ ?s 2O>V :2*&D ~<*&6 N*I >wP*&6 N*I >w?s 2iF 2ps*+M 2p:pʬuw x~:ң~~é~ò!6l l "lj| :*+M 2q!6>!q:\:rmeterFilePassword ? BDOS Bad SectorDrive Currently OpenedWrong PasswordONOFFsystem (SYS)directory (DIR), Drive Default Password lbl err First SET [access=on, update=on]Password = Label for drive Assign a password to this file.Protection = Parameter Required, try SET [HELP]Requires MP/M 2.01*",*,}0|Hc(c*~& ~ y!~4c*~& ~[¤!6!6#6*~& "0ê!"0!"4!k"2O 2* ͞ - 2+ ":cy:7::!6!6 9o&"I >w*I ~ 7*I ~7!6L!\"I]͗ :V !66  2r:rʒ:r`O! ~ ‰$ 2rk :*I K͗ !6!W6K :W!6!6!tp+qͨ~w *sDM~ :*+M i͜:W2W+ *I >w*0"w+"u~,*w~]HZ l q "l͗ !6V :*+M Ži͜:WҠ!y6å!y6[s O! ^#V$::!W6@!W6 $:y:W2W#   c $I$ H!I$I$"ID$ BH"IHI$" $H @" "" " " $" H "@DI$I$I$HBDI $! $$H$$I$I" "$@H$HDI I !!$A$A"B I $$I+  *I >w# *I >w!W6 l !6!W6͜*+M `W!6:g V ]l*I#DM ͗ ] ڙ *I >wì *I >@w*I >w]  *I >ߦw *I > w*I >w]  *I >@w *I >w*I >w]  *I >w( *I >w~!6~w ͨ͆  *I >h~n~ *I >2zҍ~Ó~ *I >@@2{/!zҷ~ý~:{~~ *I > ~~ͨ *I ~y!$DB! D!"BH!H D$$I$"I$@A"!"I"!$ "BB  $$$II$H $DDI$ HI $I$$I"$BBB$HHHII !$! H $UT $A$@AH "  " BDII$I II I$A$B"I"HII I$ I$$I"IHH$Iw$$I$H!$ BH$I$DA $H$IBDD@I$ $A$$"DI$BBII!$$$BI $$BBI $$HI!$@BII$ Eͨ):Wʛ>!W,:,~~~:WE~Î:W@@X~Î:W k~Î:W/: H҈~Î~:қ~:Ҩ~:WҸ~)ͨ͆ xx*IDM͈ ".*.}*.|͹ͽ *.|ͨ ͨ*IDM͈ ".*.|͹ͽ 9~*.}B *I *= ~B͹2!6*IDMͪ ".*.} *.|ʗͩ*.|”ͨ *IDMͪ ".*.|ʑͩ ͨà ;!6vͽ ͹K ".*.} *.|ͽ *.|ͨ ͨ͹K ".*.|ͽ C$HH"I$H$@HD@B@"$I$I@H@  @H $I$H$B@ "IH$  BBBBBB@"B"H$H$D$H"@  @H$D@$!!!D B D! DD@@  AA"H $@! HH@@"H$"DB$DDD"B!  @$""@   "B$@$$"DDBD$"HH$BD@@$DHA $B@  HAAK @DHI!H B! @@  @$D ""@ Hi9~I~*.}!6:k8:k=2+*+M͞ 6 :x*F *s#r*F :w*F *s#r$ 2|Á\ 2|:|ʓ*|M+ >>!}6> !}ڽ*}&\ ~?¶>!}4›>k \͗ {͗ !6+6:] :e H1!6͖(9!6*0"%9 .!\"I6!6:lA`:mCḾ]:Z] x:lCnx:lD—:҃Ô:mE‘͸Ô x:lF¥x:lH³+ x:lMx:lNnx:lP:mRr:mA x:lR ~{ Copyright (c) 1981, Digital Research 08/04/81SHOW 2.0;Zx0NSun$Mon$Tue$Wed$Thu$Fri$Sat$??5?Directory Passwds Make Stamp StampLabel = Reqd XFCBs Update Label Created Label Updated---/:Qx:lS!*x:lT!@@x:lUNͭx:lV_1x:lX!u@x >ͻ­:ڡ1~~ :ڭ!6i`N#Fogo&ogS HELP / e5--#- ------- ----- ------ ------ -- --:  Drive Characteristics128 Byte Record CapacityKilobyte Drive Capacity32 Byte Directory EntriesChecked Directory EntriesRecords / Directory EntryRecords / BlockSectors / TrackReserved TracksDrive Status : SHOW DRIVE: SHOW d:DRIVE:User Status : SHOW USERS: SHOW d:USERS:Directory Label : SHOW LABEL: SHOW d:LABEL:Free Disk Space : SHOW SPACE: SHOW d:SPACE:Invalid Option, use the following:, Space: &F) :m!s+4*~: :O!^ DM *My*My*MT *MC*MC*~r *M(!p+q!"*" "*~~Hұ ͝ !6 *~~H !6*~2 *&*" !p+q!6.*DM - s !6> !9 *&  N:<2 m*##N!="!q:2O͜: !p+q!C*>#M+!p+q!6>! *&**& ʹ >:<2“ >*& ~ :<2 !6:y*& ~2O> 2Active User :Active Files:Requires MP/M 2.0Not yet implementedNot yet implementedLabel for drive AccessCreate on off on off on off on off No Directory Label existsRequires CP/M 2.01͓2!6: 5*& ~ %:<2 *& ~[C*& "I!"!\"'2y2>j̓:\z:\=OS *~[†̓:] :]SHҤ͟:]U²:]H͉:]D:\KK:]O:]L:^A2*Ḿ ́>!/~,H~:H~*H~.H~>H~<H~=Ho*& 6v:<2 :<2!q*& :w:<2!s+q+p+q:=2*:w*#"ç!<s+p+q+p+q>:j>*8*:!=s*8*:"8*:! ":>:j##~H-/;!<6:=0O!?p+q!'"@!B6>@jʓ*>*@:B=2BO! s*>*@">*@! "@P!C6#6:D=2D*D& ~0O:D:DH,Ü!Eq*D& ~:C:D/*X:^Oͥͥ[v!q*& !p+q*~U*N*#";   VҀ!p+q_*DM5 !q*&!p+q*2:::`O! :2ÿ!wp+q*v~?2*v2Ϳ2Ϳ!yp+q*x\" !zq*z& !|p+q*{#!}q*}&.!~q*~&e!q:<2O* :w!p+q*~$*:!EM!C6!Ir+s+p+q!J6#6>!Kڋ*K&*F*K&*H~!J#N*H w*K&*H^! !Js#N*H ^! *K&*Hq:K<2K!Mp+q͚͚*LN#F?*L##~2O!N6>!N:O*N&*) N#F :O2O:N<2N¿ ͔!Qp+q*P##~2R*P##~*P##w*PC*Pq#p*P#:R*P#w!Tp+q*S#*##N+* *S##*##N2H*S##w*S*##N9*Sq#p:AOJ5!Xr+s+p+q*W*Wq#p*Wb*Wb*Wq#p*UN#F*Uq#pþ!Yq!"Z"\!`6x<2O* w*#"!q:0O!q:O:O!q*M(:!q*&! K*&! M!q*MT/:“:¡!6:<2O* ~2: ͊ô:0 !s+q!6ʹ) :::H2 :0!w# ͊!:#~!HC :!s+q+qʹ!:b ͊*M*!s+q:2:*&F) >;jHҩ :=:*! !s*":!q*&! ))))*& } =2: !"^* ^]G:Y)*^DMe 2`:`/:\Zͣ*^"^*Z!"aḾ͓V5*a##6* N#F*aq#pDl55* N#F.5 * ^#V))DM.5* ~ejʈ*e}t*gMS K!eC+s#r#~lj4*h*l{2j*h*l"h*l! 2 !6 *&: ~2/*G 2/cNG 2:!:HZ *&F) :N_!m*& Nq S*M*q _*#q#pO * w:;G O * w*~ :: :;G 2* 6 :;G O * w!s+q:!!6N!m":< !n"]I ]+s#r!4& !6 >!Ҝ :=2~ !6*&F) :!xҙ d * ~2* ~2* ~2*#^#V"+!!s! !6:>;!uH !6_ * ir"l>lj!k+~H1!k6:j0O:0P@"DM;i0*M͌͢k!op+q_͓R*n}ҐOÕW55I"p["r!t6>pj*p}:\:\=!t*rDMo*tMS *rDMo!pC+s#r!rC+s#r#~!u\*u&v 6 <`iw?0z:ʞ:O! ~2uʘ:uO!v 6h!u6>!u*u&v ~*u&d:u<2u£́:0.́:0B́lq~:lN~Q~~!w6l~~ ͝JU~Pb~r~ ͝n~~t~ hA ͷ1ͷ2ͷ3ͷ4ͷ!mq*m&*I~Ҵ>>!os+q*nM͝*oMh::6 \ O+ ?s 2O>V :2*&D ~<*&6 N*I >wP*&6 N*I >w?s 2iF 2ps*+M 2p:pʬuw x~:ң~~é~ò!6l l "lj| :*+M 2q!6>!q:\:r0:1:`O! ~ + :0=*MͲ2>!B:o&"V͓́_́́:@@g5Ön55́_L:»u55:255:@@!55: 555* DM 5* DM H́_!6> !ڂ: g.*&*>O:<2Q*#""b ͥ*~]*~:H*#"*~!"i`N#Fog_og_ogDM!>H ~j FO"n.~W."?.". s#r#*ns#r#\þÊð ù *nL.~ s#r.~#fo"l"ja.~2p-n&M)))6#|s#r>2!"E 4NP!"\"f ^#V COPYRIGHT (C) 1981, DIGITAL RESEARCH ‘))덑o|g =DM!>))& =~ ,~ 3^#V) =^#V|g}o GO{ozgi`N#Fogo&og_{_z#WA  #(."us#rjjYjYjMXDisk 4MXList Ly,}!}"q"s*l~#fo>o>g~0*no~#fo"*s*q:p*l~#fo>o>g~>o>g~<ͳ==P*nozC^#V!9!WXy x>o>g{s#r4-dwmw/# ~U+~w+++++~wN!9"1y~s#r͍^#V!ydڙ!s ~Gڹگ!*uͮ!|$ͮ|y)~=!~#͋xzA8  #) >$$$I$I!"HHH$@HI!!$HHI!$HD$HH@" "$DB DH $ @" @""I D"DD"  D$"DH$ @$$@ "I@ ""D@ @!! HB" ""DBADAI@D@$I! HH I"H"$H$DH %OB!|!X[yiXkX$0X! ~X!Xͨ[*u*wͮ**zN~wʇ#####~w,}D2yS"z:yS*ww#ï!"(*l*l~#fo2:y>o>g~SS:ySk!"z*_:y<ͳ,!9?}o+V+^~<++~:ySwG3 $N$&$$&&$$$$&&@&^#V"w2"~2/$!ADI DBDDH" B B"BDD$"H$I$@$ $!H"!!  $$D"A @B@@"  H"BHHI@ @@@ DD$@$$DADI $I$AA@!$H I"HH@D$HHI$$HH$H$ $ ! $$A!! $I$ "BH$D@H!I! H$H"D $BII DIA$$II$I I$I$$HI$ I"HBA"DI HA@@@U& ![w?ʍ:O|͋:z*"s#r*"*6*z:g"z:!ԇF4#4#4̀î̀{*u͋:!"Ll*"=™6͇>"2:L:!l,=!**u!O# !|!*l _f.\#pw# "6 ~w ~} ~|cli yKB!_^#V " ó {{ .  {y<<< ѷo o! Ͱ~6 o d!~Copyright (c) 1981, Digital Research Read Only (RO)Read Write (RW)System (Sys)Directory (Dir) Directory Entries d:filename.typ[ro] [rw] [sys] or [dir]VAL:USR:DSK:RO RW SYS DIR ** Aborted **:  (Drive Characteristics128 Byte Record Cwɯó ́ Foo ~!~RW!~*l O ~#k~u~+us#rÄ######~w###~wF́zo>g ~ GxyO ́! Ͱ~6'O͂  ͺ! Ͱ%~ 6IʳG2G®*n.Ͱ~>! Ͱ~q{< ͙   N#Ÿ*n.Ͱ~F 6 ~+~w##~<* ͙3 ![apacityKilobyte Drive Capacity32 ByteCheckedRecords / Directory EntryRecords / BlockSectors / TrackReserved TracksActive User :Active Files:STAT 2.0Read Only Disk: d:=ROSet Attribute:Disk Status : DSK: d:DSK:User Status : USR: d:USR:Bad DelimiterBytes Remaining On , Space: Use [size] ** Too Many Files **File Not Found Size Recs Bytes FCBs Attributes NameSysDir file, s, -1k blocks set to RO set to RW Use SET or DSKRESETUse: STAT d:=RORequires MP/M 2.01f ' Ͱw>  O  _Y![ Ͱ~Q #! Ͱ~ķy!{ Ͱ4 5~yk 5 6y҂ ^+ @Oy +  +  ˆ ͞  #+ ;  !k Ͱ + ë  +  + O $O͂  !k Ͱw`iN#   ! x  ![ Ͱwô 1 x ~+ F ; !k Ͱw … : … ! Ͱ>wn 6 . 6 £ !k Ͱ~!{ Ͱ 5͖ Ë ¯ ͣ  ͣ x #Nq ü ![ Ͱ~ !{ Ͱ![ Ͱw͖ ![ Ͱ5 #wOq"a"2h*a"}0*a"|H,n>2g!6:\:] HU͵n:\cn͠ /n@v!mq*m& x!nq:n=2nʤ͈Ò!pp+q*o~*oNx*o#"oë  x xͥ!rp+q*qDMͥ !tq:t2h*t&!vp+q*u2s:wC:sL:so&"y~ gø!{6> !{ڪ*{&\ ~?ʣ*{&\ *{&*y>ʣø!{4l*y>!g¸2s;!}p+q*|2s;2s;!p+q*~Z x p + !{ Ͱ~ Printer Busy. Abort (Y/N) ? Attach: Terminate Submit ?+F Fʍ! Ͱ~ $A!I$ A!! $D!BH "  @@@! !BHH@$@ $A "@!D"D$A$@"I$"I@@e@@$HHH"@H@A$I$!$$D $@BUUU!$HA I$ @@@ $A `\"i !q*& !p+q*#!q*&.2*i##~2ғ!"å*i##~O!;"!q*Mw!p+q!*k>l#Mͬ!p+q!6>!*&**&  >!4>*& ~ )!4!6:*& ~2O>T*MY >!/~,H~:H~*H~.H~>H~<H~=Hҹ*& 6ý!4.!4!q*& :w!4!p+q!'"!6>H**{cHHB$ HB$!!@$HH!I  !$$!!$ "H $$A DBD!"HI$$ $ y{2*{"PY! y">!+~HE!6:0Ox!r+s+p+q!6>ʺ**y!s*{"PY! y">!#~Hҩ͈÷!6:0OxX!s+q+p+q:=2*:w*#"!p+q!'"!6>8 **y:=2O! s**y"PY! y"!q!6#6:=2ʁ *& ~0O͂ ::H~ ,͂ E !q*& ~¯ :ү :ʯ :Ү ͈*Mx!6!r+s+p+q!6#6>!+ *&**&*~`i!w*&*T*G"q#pø**y~ **E">*E"w*;#";Ð>?EIV:\"m>!?T!"K">!K"T!"K"!"O"*?++!O"Q*O"C) ^#V"I"ͬ*A""y*O"A) ^#V"I"ͬ!Q"6> !Q"D*Q"&*y>2T"*Q"&*A">2U"O+*O"A) ^#V"M"*O"C) *O"A) N#Fq#p*O"C) *M"s#r*K"#"K"!Q"6 ::U"!T":!Q"6 :Q"<2Q"³*O""O"u^:fdXgcͥ!"K"?K"*K"A) ^#V"I"ͬ.*A"DM\ - !\6:f\W}, ͈*I"A) N#F'I͈*I"A) ^#V!y*7"7*I"A) ^#V!o^! y!s#N* ^! ys!4 !s+p+qͻͻ*N#F*##~2!6>!ړ :҄ *&) N#Fͼ :2!4a ͼ *M9 !p+q*##~2 *##~w*+s#r*#: w! p+q* #*i##Nͬ*i * ##NͳHw* *i##Nͺ+s#r:hAOxͥ!"  ͥ* ##6*i N#F* q#p ͥͤ ͥ*i N#F !ͥdͥ *i ^#V))DM )ͥdͥ*i ~*7#"7*G"N#F'I*G"=T+s#rkx͈ s2V"*E">*E"w*C"N#FI͎ siͥo͈ͥRx s҈OxÍWx͈:V"ҟXxâ͈A ͍1͍2͍3͍4͍͈:hAOx:x͞*K"#"K"s:f9W͎/W͎*=DM'Ikx*9DM'I͎(x*?DMͥ>?NͥTͥ*7DMͥ)x͉V!"K"?K"V*K""I"ͬ͞*\"M! ^#V *A" >*A" w *A" >*A" w *A" >*A" w *A" >*A" w.*A"DM\ -tkͥ, :x͈!p+q* ##6* *s#r  |ͥ>OdI ͥ!6>! *& 6`i+4d d"!w6x:s :sO!d" ~2 :O! 6Ð !6>! *& ~ *MdI!4 "!!#6>!1 *!} *#Mͦ- !!+s#r#4 !&s+p+q!(6!*66:&!*ڝ !)6!'6>!'ڋ *(&*$*'& ʂ !)6!(4+4Z :)Җ :*!*4F >!.62 2+ :.!.4:+ ͥxͥͥ:+7!\6)ͥ*\"M!D ^#V(ͥL7ͥLGͥLTͥL )2;*K"#"K"s!X"q:X"=2X"r-x^!Y"q*Y"&*A"~Ҋ>>!["s+q*Z"MsҨ*["Mxë͈*I"))))d""A" "C"*A""G" *A""E"!]"6:]"<2]"O! ~*]"& ~R*]"& ~/*]"& ~2:m )>:m$D.n -9T.m -L:S:IHt!f6>:R2 2\"›(ͥ>!^"6> !^":^" ¹.x*^"&*A">Ox:^"<2^"£:=' / ; >:+ : '>:,8>å !0p+q*/~:\*/Nx*/#"/B:x!1q*hMgͤ *1, kx:fҞ͎ã͎ ͥ b"2 "4!66>2+*2} *6Mͦ Rx*4}OxWxͥb!2+s#r!4+s#r#4:\?:\=Oͦw/!f6!\"6j:\"`:\"=2\"v:] v͉!"?}2\!h6?!j6?x:s0:so&"y!W"6!"I":W"/?I"H&ͬ!Q"6> !Q"*Q"&*y>*Q"&*A">H! q[(ͥ$$Q/2 2`"@- Q:`"N; Q@i`N#Fog_og_ogDM!>))덑o|gҒ =€DM!>))ҧ =Ÿ~ ­~ ´^#V) ¾^#V|g}o _{ozgi`N#Fogo&og_{_z#W;?@  xQ"6 :Q" 2W":Q"<2Q"*I"#"I"÷:W"7*I"+"I"*?"I"#"?ͬ!?*A"!/Ht4*I"A) *I"s#r!Q"6> !Q"ڵ*Q"&*y*Q"&*A" w:Q"<2Q"Š*C">w#6*G"w#6*I"A) w#6*y~!Q"6> !Q"*Q"&*y>*Q"&*A">*Q"&*A"w:Q"<2Q" *y >: *A" >*A" w*C"N#F*C"q#p*9#"9*I"A) *y ~_ *y *i ~o&͘ *I"A) q#p!R"6*i >ҧ!R"6!Q"6>!Q" :R"!Q"wҬ *Q"&*y~2S":R"*Q"& *y:S"2S":S" *G" wuI$I BH"$H$!D$$$$HH$BB$"B"HH! ! D DB@H$HHA$I H H A@ D @@ H@$$D DI II$ @$@$$I$$D$H$HB!BI HB$HB$B "@ $BBBB@B@BBI$BH$I$!Aa@THI $I$R$DBDAD"@ AB HBI @H$$$I$$BHI!$ @ >O] SPOOLQ B ?I$$HHI!$ I$!@@"I! !$I DD$$$$$$T[$ D8@" " B$HHHHA" "D$$DA"I@  I2 /m $$H@ I $$"$H$A! DD"D@$H"$A HDADHA$H" B H H$ !@"DB  $$D"DHH$IB$ $D"A  $"@H$H$" $H $IAIBI $HH@D@$@I ! H$H @!$ $H! !  $ _`\"i !q*& !p+q*#!q*&.2*i##~2ғ!"å*i##~O!;"!q*Mw!p+q!*k>l#Mͬ!p+q!6>!*&**&  >!4>*& ~ )!4!6:*& ~2O>T*MY >!/~,H~:H~*H~.H~>H~<H~=Hҹ*& 6ý!4.!4!q*& :w!4!p+q!'"!6>H**y{2*{"PY! y">!+~HE!6:0Ox!r+s+p+q!6>ʺ**y!s*{"PY! y">!#~Hҩ͈÷!6:0OxX!s+q+p+q:=2*:w*#"!p+q!'"!6>8 **y:=2O! s**y"PY! y"!q!6#6:=2ʁ *& ~0O͂ ::H~ ,͂ E !q*& ~¯ :ү :ʯ :Ү ͈*Mx!6!r+s+p+q!6#6>!+ *&**&*~`i!w*&*81~'Spooler aborted$Spooler not running$1:] ;͢2/\:]02]O> V:]0A 2]:]2/#ͫ~#ͫug͉Ä͉͙v! p+q* !"p+q*!"o^! y!s#N* ^! ys!4 !s+p+qͻͻ*N#F*##~2!6>!ړ :҄ *&) N#Fͼ :2!4a ͼ *M9 !p+q*##~2 *##~w*+s#r*#: w! p+q* #*i##Nͬ*i * ##NͳHw* *i##Nͺ+s#r:hAOxͥ!"  ͥ* ##6*i N#F* q#p ͥͤ ͥ*i N#F !ͥdͥ *i ^#V))DM )ͥdͥ*i ~OdI ͥ!6>! *& 6`i+4d d"!w6x:s :sO!d" ~2 :O! 6Ð !6>! *& ~ *MdI!4 "!!#6>!1 *!} *#Mͦ- !!+s#r#4 !&s+p+q!(6!*66:&!*ڝ !)6!'6>!'ڋ *(&*$*'& ʂ !)6!(4+4Z :)Җ :*!*4F >!.62 2+ :.!.4:+ ͥxͥͥ:+"a"2h*a"}0*a"|H,n>2g!6:\:] HU͵n:\cn͠ /n@v!mq*m& x!nq:n=2nʤ͈Ò!pp+q*o~*oNx*o#"oë  x xͥ!rp+q*qDMͥ !tq:t2h*t&!vp+q*u2s:wC:sL:so&"y~ gø!{6> !{ڪ*{&\ ~?ʣ*{&\ *{&*y>ʣø!{4l*y>!g¸2s;!}p+q*|2s;2s;!p+q*~ ; >:+ : '>:,8>å !0p+q*/~:\*/Nx*/#"/B:x!1q*hMgͤ *1, kx:fҞ͎ã͎ ͥ b"2 "4!66>2+*2} *6Mͦ Rx*4}OxWxͥb!2+s#r!4+s#r#4:\?:\=Oͦw/!f6!\"6j:\"`:\"=2\"v:] v͉!"?}2\!h6?!j6?x:s0:so&"y!W"6!"I":W"/?I"H&ͬ!Q"6> !Q"*Q"&*y>*Q"&*A">H!Oz4!{q*v#"v  *do*v :{w:x<2xO>}I|o/" * ~2  ͔! 6 w8o2* :w*& * 6*& * 6$>!*&* w!5çw ̈́Go* &* w*v+"v ~DM)!>)) = _{ozgi`N#Fog@\001 $$$$ SUB!~S Copyright(c) 1981, Digital Research $error on line $SUBno 'SUB' file present$disk write error$command buffer overflow$command too long$Exceeding 4 include levels$Include filename too long$ $Include $Bad include filename$parameter error$Include subst3ring too long$parameter error$invalid control character$directory full$close error$1  J v! p+q*  ! p+q* ! p+q* ! p+q* ! p+q* ! p+q* ! p+q* ! p+q*  ! p+q* !! p+q* #! p+q* !rs+p+q+p+q:r=2rn*n*p w*n#"n*p#"pG!tp+q(d+d d*sDMd %* & " $ " !  " ! $ " * DM͓\* DM!8* DM8/" &2 : 02 * #* DM8* N* 6: * DM8* DMtI=o* 6 * 6* >ҋ* DMͤʃ: y>! 5͓È* 6X* ~9! 60+~9! 60+4:u:u: HH:u! 5͓X ʹ So!6!"v!|6:|!x6X2}:} HҬ:} ʩ:}$wX2}$h*}Mt:}_I': <2 „oX2} ʒÄ!~6X2}:} :} H*~& :}w:~<2~O>oX2}Ý*~& 6$ddd*~&  6   o*~& :}w !~4X2}:} :}$X2}:}$:}02}O> lo: =o&%  " !z6:}ʨ!}5ҢØÌ*~& :yw!~4è!~5%* &  " *~& :}w*~& :}w:~<2~O>oX2}9:~=2t:}02}O> ?ot!z6:}c!}5]SGt*yMcé:}^¢XA2}O>җoß:}>*z&* ~ ! @ B"  D$A$A$B@$@$ $ $$H  @ $D "B$$$$$ HBHI $B $H"IDBB"I"B"$H !!$HBBBDI$HBBBHD! ADDII$$HI$$B"@! P4*w`THI $I$R$DBDAD"@ AB HBI @H$$$I$$BHI!$ @ >v  ~{;Zx0NSun$Mon$Tue$Wed$Thu$Fri$Sat$Strike key to set time$Illegal time/date specification.$1"*^#V":] :]PH. -·!6C?&o&".* -a:]PcO A&o&"!]6cX1Z?Xv!q*&!p+q*   / /!q:<2O* :w!p+q*~$ʱ*:<2O* w*#"É!q:0Ol!q:OͲ:OͲ!q*M:l!q*&! ;KͲ*&! ;MͲ!q*M/l:+:9!6:<2O* ~2: Z"L:0 !s+q!6L[|[:ʐ::H2ҩ:0!wһ"|!:#~!H:!s+q+qL!:"*3M*d!s+q:2:*&) >;HA:=:*! ;!s*":!q*&! ;))))*& } d=2:2Ҩ!6õ*& ~2/*2/cN2:!:H*&) :N_!mͶ*& N *M* _*#q#pdOc* w:;Oc* w*~::„:;2* 6æ:;Oc* w!s+q:!!6N!m":!n"+s#r!4þ!6 >!R4:=2!6*&) :Ͳ!1* ~2* ~2* ~2*#^#V"+!;!s͹!6:>;!HҒ!6*&) :Ͳ !s+4:O!' DM̓ l*M*M*M l*M*M*M!p+q!"*" "*~)5!6ͳb*~~H_!6*~2͆*&*"b!6.*DM -t /!6>!ڰ*&  N/:<2Œ_ogDM!>))덑o|g =DM!>)) =O{ozgi`N#FF~*Password ? $Requires MP/M 2.0$No file.$1"*}0|HX!6+6:mP¡:n :nAH҈!6á:n0o&T:o0_!s:Sʸ!"!\"bIl9:b2b\ "*}*|;kl9:b2b\ ogo&og_{_z#W]  @ BI BHHI$DA""I D"DD"  D$"DH$ @$$@ "I@ ""D@ @!! HB" ""DBADAI@D@$I! HH I""D$H H$!AD B@!$ "*}ʱI9!|6!6:/\)HҮ!6>!ګ*& ~2]!6:ڤt2Y:ʝ: :<2!2!6*M!4=!*|!Yv!q*&!p+q*   !p+q*!p+q*!p+q*!p+q*!q*&-  !s+q+p+q:=2ʠ*:w*#"Ã2aں:{Һ: :kkl v!6>!I͡2 *&l :w:  M'S[I::7:$:=2O!l 6 :BY!42^#V))) BB $I ! ! $I $$ HI$B D!!$$I!$I AA!ABHH $D$ BHoX2} ʒÄ!~6X2}:} :} H*~& :}w:~<2~O>oX2}Ý*~& 6$ddd*~& 6   o*~& :}w !~4X2}:} :}$X2}:}$:}02}O> lo: =o&%  " !z6:}ʨ!}5ҢØÌ*~& :yw!~4è!~5%* &  " *~& :}w*~& :}w:~<2~O>oX2}9:~=2t:}02}O> ?ot!z6:}c!}5]SGt*yMcé:}^¢XA2}O>җoß:}>*z&* ~ !H~"Invalid user number, ignored $1#:] 62C];2C)0202")*)^#V")"+^#V"H>Hʹ!J6:J*J& *H>*J&- HҴ!J4:J*H >!Cw!"H*H ^#V"Hn2CCw5Oz4!{q*v#"v  *do*v :{w:x<2xO>}I|o/" * ~2  ͔! 6 w8o2* :w*& * 6*& * 6$>!*&* w!5çw ̈́Go* &* w*v+"v ~DM)!>)) = _{ozgi`N#Fog@\001 $$$$ SUB!& v!$p+q*#  !&p+q*%~0w t*%#~ o*%n&ͭ*%#~0_}*%~>!(p+q*'~ Җ*'>0w*'#6 è*'~ 0*'#w*'61^#V))) o&og7PTmpx User Number = xx $ $$H@@ @@$I$HAD A@AA v  GCOPYRIGHT (C) 1981, DIGITAL RESEARCH [MP/M II] DDT VERS 2.0$10 !~=W!xo ~#bbxʑ {„~#o}oҍsx.2Ã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ҷ*~#" <AOGƐ'@'OxƐ'@'ON# ^z8O!B N#N ¾SP.* |} !9":q!"-l Q ͂ 2AF F _!p^#VF VF  v F F  " F F F f a q F F *.[6\͢ F C=F " 2 F C" ="=F > 22CF >}* N#F GzW{_ 7 xPw2/w2Cue"=u=F Æ*}o҆!"ͺ 2*" j ~ͪ # گ}›"*j  *}¹|¹* 2ÉCF {z|F 2bB 2͕%>20ɯ202!0~@ 6^4#:[0w~$w:[00 ( @!!BH @@ABH B! "BHI$$BI$BI $ HI D$HD$$ H B!$D$"$B$DA!ABI$H B$I $HI$H$! $I $I$D@ $I$ UUUUUUP@ "I$H"HH$D!H$I I$DH$BD@I$A" A@D $$$$H HBH !HBI$"A HI$}}x2ͺ CDM< * "=< M =< YPM 1**!~4h #~#F#h xh ~#s#r#w:CF ͺ  j ᯕo>g 2*" *.\"  ͢|F *.|w>2A22 w#|2 *.e~H#~E#~X*?}| "?! >>F *N#FxC ~% w$#2 bx2 {Y ~#o}ob H :AF C!} =F 2A*ͤ͢F $*\͢2 * w# ¹  ß F : W _  O { `i"2    w#' $H$B"BBA$ I"H$DHDDH@$"" D@$@BB$ HI! @@!H"$B$ $"$@B" $B$$I$@B UUTH@@!!$ (!$B D!!$$I!$I AA!ABHH $D$ BH@z   F  GтWx!V ~A l #5 ͺ *? j * 2 NEXT PCC=F ͺ j ~ͪ j Q ͂ ʢ .2F=F |F }w#k ì >2C! =F }F +" C2 =F *${ozgF }|o>gͺ 2:AF CF =F 2A#*.\͢͢ Ag} 2 |F }!w2ʹs#r2'*.[~' _*.~A *.[4B *\͢A *.[w 7ͺ >?l 2>  W  ͢!"> _͢a_!~> ʙ 5*~#"y ҥ 0l 7l ͛ Û > l > l  ͢|ͪ }ê  l >.l } 7*}o| , 0 F ^#V#! ))))o͂ $s#r#!4͂ !6# ʈ,a>2d 8 ʈ͂ 8 ʈ͂ 8 F F !vXN!~͖ ʱé!q_^!ʹ^#V~l xͦ͛ >=l !~ͪ  !fͺ  #x j j ; 9*" !6b+"*~ͪ # bj ^^#V b~ͪ CZMEIABDHSP!""+"!91*:~!~6ʺ=G#^#V#~xé#"!N#F{*>7 *|+" :;  {>*l * " *"2 !~##7*Z*F#$!s!R^#Vnnẗ́͏::^#V#z*^#V̈́ʣ>:x´8_*zt͏>><7" So1f! COPYRIGHT (C) DIGITAL RESEARCH ͵ ͠ ͖ 8{ Ăy0 2͵ ͖ Gͻ ͋ ͖ 1!m~ ʏ0 ڂҔ))))o#n"͵ BAD HEX DIGIT IN BASE$ !^!w4~6\\͵ DISK IS FULL$> ͻ> ͻ 07ͻfU\ѷE!*=R͵͌!}O|G{Ozp>sy_>:ͻ{ͳ!*|ͳ}ͳͳ~#ͳ¡ͳ[W>:ͻͳ:>ͻ\͵ EY HEX FILE WRITTEN$͵ CANNOT CLOSE FILE, CHECK WRITE PROTECT$!ew#LG\q͵ NO INPUT FILE PRESENT$COM2\͵ NO DIRECTORY SPACE$HEX2| DISK READ ERROR$G>2hPTmpx User Number = xx $ $$H@@ @@$I$HAD A@AA  s]" B@"@D $H @ BD! !" $!HB  B%   ) COPYRIGHT (C) 1980, DIGITAL RESEARCH 12!"͉*#}N#D+"{za6#T!4͉7t{Á MODULE CONSTRUCTED$͈:‰Wg_ggO:>2>o>g"yoxg"* :%{ggG:*zZ{Zp*}|Y"YNx:YxYTTB{*#T RELOC ERROR AT $#gÉ͈͈GтWx:ʧ_!~ʻ!4û\¹2Ó>a_>w{/ GzW{_ *#_   07|}> > *"{#*{#{*#}|ړ7!o7 REL MOD END $ REL MOD SIZE $ REL DAT SIZE $0 {Á BAD HEX DIGIT IN DATA SIZE SPECIFICATION$Q$!;Z9>2T;TO)))) 9!Z">$2:] :m !lw#ˆ72\ʻ!6{Á INPUT FILE NOT PRESENT${Á INVALID RELOCATION BASE$  59 {Á BAD INPUT RECORD$%{ÁMISSING FILE NAME$@{ÁCANNOT CREATE OUTPUT FILE$c{ÁHEX FILE SIZE TOO LARGE$ lw#ˆ72\ʻ!6{Á INPUT FILE NOT PRESENT${Á INVALID 2ry $/ Write$/ Read$ $ ALTOS DISK STATUS v1.02 $` :  gi"#D:! !L# !L!>&"#*#^#V"#*:"&͇#U o !]6 k. #͵@&" -j . #͵F&" -‡ . #͵L&" -¤ !"=& +|µ R!LR"*L.=&" - .?& $ - R.(#A& - :!. "6L.=&" -# R7WxBo V 11Wo *SDMo V v!1q*1&!3p+q*2 !5p+q*4#6:Pғ *4 *4#N! *46!7p+q *6 6 *6 6*6!9p+q*8!;p+q*:!=p+q*< }MhCOPYRIGHT (C) 1981, DIGITAL RESEARCH 0123456789ABCDEF @!%< 7COPYRIGHT (C) 1981, DIGITAL RESEARCH 654321 Disk read error$Disk write error$Directory full$Disk read error$Disk write error$) ? $) ? $) ? $ <- bad character, re-enter $ LCKLSTS DAT$ CONSOLE DAT$ Enter memory segment tabl !?p+q*>!Ap+q*@. Fo V !Cp+q*BL Vo V !Ep+q*Dj go V  *D 6!Gp+q*F!Ip+q*H!ʡ vo V !Kp+q*J"ʿ o V !Mp+q*L#!Op+q*N$ _  _ ! $q: $ > : $a/>z! $/H : $_2 $: $!$s+q:$2$ *$&͇ *$& :$O!> ~w!$s+q:$2$ *$&͇ *$& :$O!> ~/w!$s+q *$&͇ :$O :$O!> ~!$p+q(_ *$~ Y_ N_ o " :" * Re: $ Base,size,attrib,bank $ Base,size,attrib $*** Memory conflict - cannot trim segment *** $*** Entry error - zero length segment *** $*** Memory conflict - segment trimmed *** $ MP/M II Sys$ Memseg Usr$ Bank $ Accept new memory segment table entries $ *** File cannot fit into GENSYS buffer ***$ $????????RSP Select Resident and Banked System Processes: $ *** GENSYS Failure - RSP extends below the common base ***$ Default entries are shown in (parens). Default base is Hex, precede entry D"M Y*$w!$q:$O!. N_ :$O!. N_ !$p+q _  _ *$|O *$}O H_ !$q*$&͇DM9 !$s+q(_ !$6:$ #_ !$60:$dڰ !$6+4:$d2$Ö :$ *$M_ !$60:$ !$6+4:$ 2$ :$ *$M_ :$0O_ *$M o !$$s+p+q+p+q:"# *"$6:'$<2'$O!" N 2&$ :&$,[*"$#""$6!%$6:&$#k!%$6 :&$02&$:%$> !&$Hң>!&$Ҟ:&$2&$ã!&$6!%$:&$*"$^*%$&͇*&$& s!&$6*"$6o *"$6( * $DMo * $~ \(_ * with # for decimal $Use SYSTEM.DAT for defaults $Top page of operating system $Number of TMPs (system consoles) $Number of Printers $Breakpoint RST $Add system call user stacks $ Z80 CPU $Number of ticks/second $System Drive ($:) ? $Temporary file drive ($:) ? $Maximum locked records/process $Total locked records/system $Maximum open files/process $Total open files/system $Bank switched memory $Number of user memory segments $Common memory base page $Dayfile logging at console $ RESERVED $ SYSTEM  k"$N !'$6>!'$J*"$#""$:'$:!/H7*"$6C,_ *"$N !'$4 *"$+++""$o g*"$N*$$t !%$6!'$6" V V !w "#^#V"6"V ͯ Ÿ@ *#>w#6!t V ͢ >"t *#>w#6V ͢ !!:!o&)*#q#p]#t V ͢ "t *#N#F+q#pV ͢ =&t *#*#s#rV ̈́ .(K&# -V ͢ V ! 6!t z / >"t z / z !($6>!($ړ::"2)$>!)$ډ*($M*)$ :)$<2)$k:($<2($\: =2($!{"||O: 2 : 2)$:($!)$*)$ :)$<2)$³o * M_ ! :($<2!!!6#6:!<2!!-$6:-$/Ko !($6#6!!:)$P:!Ҵ*($&! DM*($&! DM*($&! >*($&! *($&! ^N͒ 0o :P !]6 k*($&! ~&`o !,$6*($&! ~2*$*($& ~<2+$:+$=2+$!,$*($&! N**$͒ u!,$6|:*$<2*$D:,$*($&! ~2*$*($&! *($& ~=!*$*($&! N**$ :*$<2*$“:)$<2)$:($2($*($&! :*$*($& wo M*($&!c:!|o !;%6:!=!;%Q*:%&͇*;%&@͇ͮ*;%&") q#p:;%<2;%::%=2:%>!!h::%=2:%*:%M_ :!O_ #o ::%=2!*!M_ 9 2o !<%6<% :<%/Ҷ:!<2! :!2 >! *  : <2 :!2 :!: =2 *  >!!: =2 *  :!E: =2 *  >!!E: =2 *  : =2 *  : 2!Zo V ͯ sV  V M =&ͺ#͟" :]$µ*^M A2P*_M R2Qý!P6#6* }|2!=&2"*:=!* DM!=&!D! ~2*$*($&! *($& ~=!*$>*($&! N**$ :*$<2*$:)$<2)$:($2($Ì !($6#6:!!)$:)$vo |o *($&! N_ *($&! N_ :!Ұo *($&! N :($2($:)$<2)$[!-$6o -$ :-$/H!($6!*$6:!!*$H*($&! ~2)$*($&! *($& ~=!)$6*($&! N*)$W :)$<2)$:($2($:*$<2*$v!1$r+s+p+q. *.$"SDM6 -e5 ͯ {@ 2$t 5  *3$" *6$" * ͟ ұo @ : =2$: 2 * * |O: 2 :$2$: =!$*$ :$<2$*0$: w:!5W:ƀ2\: gxL {=?:\;>\2\5 !~#o}oH {%|* w# Z* }ʆ|* ͷ=}!~ʕ4* "ͷ*:=2™!V !5 !|CqDM!>))덑o|gv =d^#V))) DM!>))Җ =Ž^#V|g}o Ÿ_{ozgi`N#Fogo&og! 2 5  2o *SDMo * DM9 ! : O_ ;6@ :"@!$6 !":$.*$&͇U  DM -n" L!?&"#*#*$&͇U  N#Fq#p*$&͇U  ^#V"=&*#*"s#r* ""R:$<2$H!$6!w "#=&t !":$C*$&͇U *#N#Fq#pV ̈́ *$&͇U  ^#V"C&V ͢ :$<2$!;"6!"6!""!""!!6!"6. 5 6 -l5 27%:7%N! 6 Co :7%.*7%&!] ͇=& #DM -¸ _  o !7%67% :Q!7%.*;"&)))$  -:;"!ME MPM SYS SYSTEM DAT  RSP $ BRS$&!h<2;":QY_ 5 27%Ð:;"N! 6$!6%6!;":6%K.*6%&)))$ DM -P! L!:": wuo kA*""=&* ""R:N&A!w "#V *#N#F *"&͇U q#p*"&͇U  * s#r!5%6>!5%:*5%& =& >27%:7%a/>z!7%/H:7%_27%*"&͇U *5%& :7%w:5%<25%:"<2":6%<26%1 * |2!!8%6>!8%y*8%&=& 6:8%<28%[=&t ! :!"t z  z M !!F ! C  !+|ͧ!<%6:<%/Ҽ! 6.+N" -& 3!Q !s "!^%o ! o !  8"o :9"q%O_ o " :"ʻ*"M A<29" o :"q%O_ o " :"*"M A<2"   y") "F z"b "*"&*"& "{"{o ! :!=2! !ò%l:"q!:"6!!6o " :!ʨo :!!!::%=2:%*:%M_ :!O_ ::%2" !!!!Enable Compatibility Attributes $=%o " x%@5 !*** Error Maximum Exceeded - 7 Assumed *** $!!~%6 %J:!YB !$!$BBIUUUT@@ $ DD A@H$@!@$@ B! @$$$AD!D " @"!@ @ADB!@@ @@B@  !!@ @A @@@@  DHA$ $DDA@$@ @(@ @@@   DD "@!@ COPYRIGHT (C) 1980, DIGITAL RESEARCH ERROR: $, LOAD ADDRESS $DISK READ$INVERTED LOAD ADDRESS$DISK WRITE$LOAD ADDRESS $ERROR ADDRESS $BYTES READ:$INVALID HEX DIGIT$CHECK SUM ERROR $FIRST ADDRESS $LAST ADDRESS $BYTES READ $RECORDS WRITTEN $HEXCANNOT OPEN SOURCE$COMNO MORE DIRECTORY SPACE$CANNOT CLOSE FILE$*!9"!` !" !" \!""͊: ƒde"\\\͊: ²d\͝: )d;! q* &  ! q> ! : A O!! : 0O! q: O: O! p+q* |O* }O! p+q*  ! p+q* DMB! p+q)R* DMB1B* DM+;! p+q* 2 ! p+q* 2 ! p+q* 2 2 ! p+q* ! p+q* !! p+q* !# p+q*" 2 !% p+q*$ !* s+p+q+p+q:* =2* X*& *( w*& #"& *( #"( 1* #" ͇r*  ~!" ! ͩ×* " x2+ º*  DM":+ Ad*  6!" Ç!" :!"1 "3 "5 }27 !"/ "8 !! ""6Y: !- 6=2, á:, 5 c+s#r==_HL"/ " >1 ͛S* "1 =2. :, =2, v=O* #" Y3  ͎҉* +"3 .!- ʞR̀* "/ / 8 ͎* #" çR*1 DM+R*3 DM+R*5 DM+R*7 M!: q8  ͎Kd*8 ! ͩp!; 6>!; X*8 }O!7 *; & w*8 #"8 !; 4)!7 4\mad* }O!7 :: wlR*/ DM+{R* DM+R / ͎*/ }¿8 / ͎7 N*/ #"/  å;*/ DM+: Y2"[y [*MDy! ͻ ! õ ! õ ! ͻ oA^#V! ! ! !  w#:O|^#V#"M##"O##"Q##"j!S*U![*`|!w6/6>!hN#F*Ow#w*Qw#w'!N#F*Q^#V*O~#foyx*[{_zW+i*[yxڑ#*hDM*Os#r*Qs#ryOxG*j0MD!!]N:} G>O:| * :wn& ^#VO"*}:]*)=:^O:}o"* *!-~2}~2{%:_2|-:oO:}w:{w |g}od*c""V"~< 0O> :< 0:< AO>&R̀:< A H.2= !- w:= !? s+q*> &~:? p_og_{ozg^#V) ~_{ozgi`N#Fogo&og_{_z#W'" W*g& * & ) q#p: =2 .* & ) > ##DMd -d * & ) O! * & )  N#F>áS!i:hN_k^!j:iN_ki!N:jN_kt!S:NN_k:T ! 6*V" * & ) * s#r> ʍ: <2 * ##" ""  MP/M II V2.1 Loader Copyright (C) 1981, Digital Research $COPYRIGHT (C) 1981, DIGITAL RESEARCH Dsk rd err$ Synchronization: Serial numbers do not match$ ?$Nmb of consoles = $ Breakpoint RST # = $ Memory Segment Table: $SYSTEM DAzTTMPD DATUSERSYS STKXIOSJMP TBLRESBDOS SPRXDOS SPRBNKXIOS SPRBNKBDOS SPRBNKXDOS SPRTMP SPRLCKLSTS DATCONSOLE DAT --S- $MP/M II Sys$Memseg Usr$ Bank $No break, CP/M debugger overlaid by MP/M$failed"L* ^#V" U*S& * & ) q#p: =2  .* & ) > DMo -o * & ) O! * & )  N#F>ç:U2  :S2 ! |O: 2 ! : N_k:]` : 2 !]: 2 ! : N_k!" !b 6:k=!b * DM!" *b &))l N`i DM*b &))l  N`i DM:` *b &))l  N1&:b <2b r ! : ! !:\ !", ð: *w ! 6!\" * #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6t * >2 !l"  * "j to read MPM.SYS$ MPMLDR error: $1, " #*\ "V !"Z *Z #"Z  z>V +s#rBKz w!", ð@*g& " \o͙a !*\ \ +|£ 1, *, DM!vv!. q*. & !0 p+q*/     !2 p+q*1  !4 p+q*3  !6 p+q*5    !7 q!9 6+60:7 dT!9 6+4+~dw=:9 g*8 M!8 60:7 ~!9 6+4+~ wg:9 Ҍ*8 M:7 0O!: q> !: ұ:: A Oú:: 0O!; q:; O͖:; O͖!= p+q  *< |Oͻ*< }OͻH!@ s"x ~S*  ~YH * ~SHҿ . * DMz -· _og^#V))) DM!>)) = ^#V) O{ozgi`N#Fogo&og*w ! 6!\"· #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6??RSP??BRSMPM SYS ~SHҿ . * DMz -· _og^#V))) DM!>)) = ^#V) O{ozgi`N#Fogo&og*w ! 6!\"· #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6??RSP?? BRSMPM " '+p+q!A 6:@ =!A ,*A &*> >O!A 4 !C p+q*B DM !I r+s+p+q+p+q*D DM-*F DM*H DM&!M s+q+p+q*J *L & *M & >!Q r+s+p+q!R 6#6:R <2R O*N :S <2S O*P ë>!R >P >#H!", ð*P #"P ã*V DMV X DM&\z M.  -<!{ ", ðz [ðz oð*\& "\ "V *]M͖*^M͖*V DM>:]=:_:k==)) = ^#V) O{ozg "{2p!"9"12z2x!y%K!D _^#V       [*MDy! ͻ ! õ ! õ ! ͻ o:A2  yy Bdos Err On : $Bad Sector$Select$File R/O$:!  2>:> :y!4 5~yU5 6y $ $:a $ $ $O "("  +s#r'*V DM*X >2*cMk=!d:cN_kH!g:dN_k:! 6*Z" * & ) * s#r> ʇ: <2 * ^#V" W*g& * & ) q#p: =2 .* & ) > ##DMd -d * & ) O! * & )  N#F>áS!i:hN_k^!j:iN_ki!N:jN_kt!S:NN_k:T ! 6*V" * & ) * s#r> ʍ: <2 * ##" * ^#V" U*S& * & ) q#p: =2  .* & ) > DMo -o * & ) O! * & )  N#F"1w>2**M{#zr+s{ozg**f$́*W* SͶwN#F$!KU!SU+aU[aM[*S*K!~#a:…#~$…=2a:n2:_/GyO͚͊*s:rOy?x  ¨N͗¨# :">ç:U2  :S2 ! |O: 2 ! : N_k:]` : 2 !]: 2 ! : N_k!" !b 6:k=!b * DM!" *b &))l N`i DM*b &))l  N`i DM:` *b &))l  N1&:b <2b r ! : ! !:\ !", ð: *w ! 6!\" * #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6t * >2 !l"  * ~S*  ~YH * ~SHҿ . * DMz -· _og^#V))) DM!>)) = ^#V) O{ozg"2!n~Яw͓>2>2n!rq*"s͓3è ͊6gͨ8PYye Ҁ*`{z҈BKҀT<!* pg Ì *~w͊ ͌ͨù ͊ ͌ͨ͊%~* ! N!Fwyx>>*w~#+w#w+ɯ2ͨ͊ * :wt~gwm~¬É&&¬#¬ # Y ڣw ~>2l͛!5*!F"͊"!w# ! w͡2l4͊* ~<w"di`N#Fogo&og*w ! 6!\"· #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6??RSP??BRSMPM SYS ~SHҿ . * DMz -· _og^#V))) DM!>)) = ^#V) O{ozgi`N#Fogo&og*w ! 6!\"· #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6??RSP??BRSMPM SYS b~SHҿ . * DMz -· _og^#V))) DM!>)) = ^#V) O{ozg"G:_!l9 4~D͊9:m2o>2m::}!{tŠ2}:Šʊ VMQ*I:Oc}*IMD͕"I2:p!wÍ>2x*~=2p:2y~2zwͱ:*w!"G"I2!"K[ÍñͽͽJ*"K[:x<*6:z<w:y2pͱ**}Do>2m::}!{tŠ2}:Šʊ VMQ*I:Oc}*IMD͕"I2:p!wÍ>2x*~=2p:2y~2zwͱ:*w!"G"I2!"K["I "{2p!"9"12z2x!y%K!D _^#V       [*MDy! ͻ ! õ ! õ ! ͻ o:A2  yy Bdos Err On : $Bad Sector$Select$File R/O$:!  2>:> :y!4 5~yU5 6y $ $:a $ $ $O[ys [*MDy! ͻ ! õ ! õ ! ͻ oA^#V! ! ! !  w#:O|^#V#"M##"O" 333645987<;=>?AB:@r* ^#V" > ͠ * >ͫ 1r* ##r] * ^#V5* ^#V" Î:6r* ^#V" > ͠ L* >ͫ ?Ir* ##r] * ^#VM* ^#V" * ^#VN* ^#Vc:xr! 6* ~=! * &)* ͘ :  * MEr* &)* ^#V! 4}:r! 6* ~=! %* &)* "##"Q##"j!S*U![*`|!w6/6>!hN#F*Ow#w*Qw#w'!N#F*Q^#V*O~#foyx*[{_zW+i*[yxڑ#*hDM*Os#r*Qs#ryOxG*j0MD!!]N:} G>O:| * :wn& ^#VO"*}:]*)=:^O:}o"* *!-~2}~2{%:_2|-:oO:}w:{w |g}od*c""V*S# ‡ )Ï:O!͎yoxg*G:Oc}!GN#F͕"G*b*Ms#r ~ͨo$*S:*~6 #6#ͮ :  * ME! 4* ^#V" :r! 6> ͠ ! 4~c: ! 6 * ##r* ##~M* ~XH * >ͫ H * >ͫ H* >ͫ H[ * >T r] ! 4* ^#V" @:r* ~{! 6* ~=! {r* & N r* &)* >ͫ ^rt* &)* >T r! 4r* ~! 6* ~=! * &)* >ͫ r* & N  r* &)* ^#V! 4‘r* ~h !#!;*; ":;*+":*"::,*>;*:;":3*9#":*+"/:*"1:**:"3:*+"^:*"`:**3:"b:*+":*":**b:":!96>!9ڤ*9&:) N#F3?1!94:82 :2;:2j:2:2:2:2;2A;!96+6!96!"8!"8}28!8628+w+w!86X!"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9}29!96#6#6*8"929292929!"9o&"9|!"9!":":";"<;"9"-:"\:":*+":*+"/:*+"^:*+":!":"5:"d:":!":"7:"f:"::8*9:8=o&))8  ^#V!q;p+q!r;6>!r;2*r;&;) p;# 6* ~=! h 5r* & N :r* &)* >ͫ K >ra * &)* >T r! 4 Ir* ~ ! 6* ~=! * &)* >ͫ mr* & N rr* &)* ^#Vv! 4~ wr! 6* ~=! r* &))* NEr* &)) * NEr* ~W r* &)) * NE* &)) * >z r * &)) * ~› r r4* &  * r[ 4* &  * >O! N ] ! 4 K " #7+*r;&;) ^#V"9-*r;&;) q#p!r;4*8&))8  *9s#r*9͇7"8*8&))8 q#p:8<28O>}<:8=28<:8ڕ*8&))8 ^#V"8  ^#V"9*9DM!86#~͌ . v9\ -:9 .9 -:8v9p4*9~=͌ :8&^'*9~(*9~)H\*9~,L<͌ :8Y^'&:8tͻ'͈(!863!A"9͌ . v9\ -†*9~=͌ í.9 -¥:8ҷ^'*9~*9~(H*9~,<͌ :8^'÷B>:8͑'ͻ# " * ^#V" " ^#V" * "  * "  * "  * " * " * " * " 4* " V* " * " w* " T* " U* " * " * " * " *##" 4" " * K ! s >J  K ! s* : w::riyM]m& K ! sK ! s *~#fo_ogDM!>))덑o|gy =g DM!>))Ҏ =† i`N#Fogo&og_{_z#Wɼ!  :* ͇g#'6:8͈(:8:8H,!"8:828*8"83*9~(ˆ*9~ʈl;*9~)h~V*9~*9~(H҅<G:8ʓ<*Ͳ!6~5*& 6:[],()?$!t;q:t; $> :t;aO>8:t;_2t;:t;!A"u;9u;7{*u;NOͲ*u;~&q Ͳ Ͳ*Ͳ*u;#"u;B@6!w;6> !w;ڪ*w;& :s;£>!w;4‡>*9#"9*9N2s;&íͭ:s; ͭ!s;6 !y;6+6:y; :y; !s;6Ͱ # :[ ͱ!N5!6:%:<2*6 * 6å!q!6> !d*&I :]>!4A>:<2O* :w:?†!6!q!6?!:ҠgÐ!q*&0  BBHH$H "$BB@@HB!"B$$ A@    $AHH@ ID A@ !! $$HAHBD$$  $A$@! HHBB@$$$$ I "BB!$ ! HD$ HHB$$$$BB$$B@BH!$# !\6͂ !!y;6͂6 :y;- !Ͱ ͭ :s;:| :\:y;HZ !:]A<2\O>n !*y;&\ 6 ì !y;6:s;.¨ ͭ͂ڨ :y; ڟ !Ͱ ͭÌ ! :y;<2y;O!\ :s;w:s;0O> :s;02s;> :s;AO> :s;A 2s;>>!"z;ͭ͂. % *z;))))*s;& "z;( <ͭ *z;:s;AO>/ͭ2 O :s;A<<ͭ2 d :s;A<:s;Zo >Z<ͭ:s;XO>چ :s;<:s;]:s; HҀ :s;S¸ !96ͭ} :s;P !96 "9} :s;D !96 "9} :s;L "8} :s;M #tçCOPYRIGHT (C) 1980 DIGITAL RESEARCH ͽ2l=͎:l=;)!"m=ÿ :82A:8*9"9:9COPYRIGHT (C) 1981, DIGITAL RESEARCH ? OVL LINKING $ $ 188!86u:8!8<:!""!""!"8*8^#V"8"9:8 ͥF6**:"9"9997.9@6997"8|!86u0:8Rv!j;q:8Xm*j;M5|:8Y|*j;M5!l;p+q*k;~$ʝ*k;NW*k;#"k;Ã:8Y±!868}!m;q:8͞*m;MW!o;p+q:8͞*n;DM}: *9#":*: ":*: " ## "8} :s;OZ ͭ:s;P! !86T :s;C1 !86T :s;RA !86T :s;SQ !86T <ͭ} :s;Am !6ͭ} :s;Q€ !86ͭ} :s;G !96ͭ!96͂ڿ >!9Ҩ <*9&9 :s;w!94ͭÕ } :s;$F :s;,:s;]HC :s;C s 28= :s;I > 28= :s;L > 28= :s;O) S 28= :s;S: S 28= < } :s;Nz ͭ:s;La !86Zt :s;Rq !86Zt <ͭ} <Ê :s; ʋ ͭ!967¡ <:s; ¬ :s;[· ͊ :s; *q9#"q9!s98 !"q9?*s9DMP94*q9? ~ !N92|; !#9 8fH!<]*<*9 DM*<Ͷ)]5!<]>-"9>!!9 !96ͣ!:9T Ͱ& *; ~,*; DM͠4*; 6*;N#F*; *; N#F4!;q*;##N#F*; :;w*;##N#F+q#p*; 8ډ *;##>w#6!;p+q*;}OK*;|OK*;N#F*; *; N#F4*;##N#F+q#p*; 8͡*;##>w#6*;##N#F*; ~O# !<:<0OͲ#:< AOͲ!<͎7M$::!:!;!@;ҡ::2\. ]u -\6!:6!:6!;6!@;6:::! :!i:!:. ] -½: :2\\6! :6!::6!i:6!:6*8###9 8!9!96Ê*8###9 8!9 !96Ê*8###9 87!96Ê:9r>9 8:9H:9/Hj!96o!96Ê:9!9҅!96Ê!96:9қ*9"9ô:9Ү*8###"9ô*8"9:9*9"9*9*9"9*9*9"9997997#"9!"9!9#`i77!;p+q*;";^#V";K*; ~y*;##>8IK3*; DM4*; DM4*; *;##N#Fq#pÄ*;##q#p*9#^#V*9 ^#V*9 ^#V*9~*9~*9>*9~*9 ^#V*9 ^#V!;p+q*9#*;s#r!;p+q*9 *;s#r!;p+q*9 *;s#r!;q*9>:;Hw!;q*9>:;Hw!;q*9>:;Hw!;q*9>:;Hw!;p+q*9 *;s#r!;p+q*9 *;s#r!;s+p+q!";*;&9) ^#V"9>7>ͅ; 8*9"9*;#";͚"9>7#6*9"9!6*&9) ~#.!4> !"9:92!6:2:=2ʒ*&9) *&9 N!9 7ҋ*&9 ~2*& :w:2!4?*&9 :w!94<2!9*9&:) N#F3:҈*9&b;) N#F"2<:<ʅ"<"<:<O>y"<29 82<ͅ"<͎"<ͱ"<͚"9Ù:9<29!ͅ; 8!;s+p+q+q+q+q+q+p+q+p+q>; 8:;HR:;a!;6 f!;6:;9 8+s#r!98҃8@6:;Қ*;DM*;ͮҚ*9"96*;DM>; 8*;&9) N#F DM *;DM:;*;DM̀*;M#*;Mk*;M:*; 8&*;&9) *9s#r.*9DM͗!;6>!;ڗ!";*;&9) ^#V"9>9 8}͚";*;DM *9";*;"9T*;&9) *;s#r!;44/!;6>!; *;&9) ^#V"9*;&b;) N#F>9 8OKͅDM͎͊DM͊ͱDM͚͊"# "!3*҈:<O>}<<75O!9 8"<È*<*<"<*<͎7>766!<65/5/><͎7 ͺ7 M͙9ADM?   *<#"!<8v66!<6>#w#62<ͻ"9997ʹ/:<ұ!<6><͎7>766!<6*<#"<>̈́7)))Md9w7+s#rË>!<866#a9!;4 !"9"9"9"9*9##6*9 6*9^#V!!?!w*9##~*9##>w*9 ~!:<Hwd9w7++";*;^#V!:<Hw!d9w7+s#rè!!98*9"998*9"9997997#DM*9ͅͅ66*9DM*9ͅ66*9DM*9ͅ66*9DM*9ͅ669978 8*8|< 8¤ Ͳ(Ͳ*!~='(H!~=(*~=&\ 6 (:~==O! *9*~=&\ w:~=<2~='!u96.e2 -4(\͵4/b(!u96.e5 -T(\4*9"=!96&*="9d9w7+s#r'.9& -(!96!96 ͻ"9997h)ʹ/W)*9DMF $ !"9  *9"=͕"*="9!$8.:^:8Z͹.͢?OVLAY?OVLA0RELIRLIRLRELi)i)O`i77>!9Ҁ!e=6:9!e=ڀ:e==O!9 NͲ!e=4`i)298"9i)29:9¥!96!f=6:9!f=i):f==O!9 Hq!f=4ª*h&ͺ7*|& "J9=*9DM\4*J9+"L9!g=q:g=29*9&:) N#F3!h=q:9!91 *9&9) N#F*h=3:9q 997_ *9"9997q *9"9*9&9) N#F+q#p!k=s+p+q:92l=O!9 9l7"m=*m=DM*l=ͮ '"m=ͽ2l=*i=DM*k=M#:k= *9Mkã *m=*i=*9*k=*l=:$=6>!==)H!=.):==O! *9N 3)  :=<2=)*9"9:W)͘*8"9d9w7+s#rí(!94~ ڠ)6*9#"9*9{zڔ)!"9*9!=~2=xG:=2=G k)x{_ )#º)>ɯ`iq#z)COMPRLRSPSPROVLSYM!=q*9= :=w*9#"9!98*=*9DM\4!"9!=q:=!=2=:=<2=K*!=6*=M)!=6!=q*=M)*9#"9!=p+q*=}OL**=|OL*:9*:8ʊ*+*8"9:9Ҥ*L**9DM_*!=6L=!=**=&9 N!9 87/*H**=&9 N+!=4©*:8:8$<$!)!"o=>7!*o="m=!l=6%!ã :92s=*l=M *m=DM:4*m=#DM:4O`i77"q=*s=M *q=*9"9997ҝ!*9 ~#Œ!*9 6d9w7+s#rj!!869*9M!ʹ!!969*9M!"9|29!D=@6*999 -!:929*99͚/,"9*9iͦ9*9Mi"!98f"/ͲR/Ͳ Ͳ+=66Ô"9*9*9*9*9i*9*9"99*9M/"9*9i*9DM̈́ 9*9M#ʹ"=R66#*9&9) 9$HH +p,!=q:=#+*9"=4+*=&9) ^#V"==97F+29@6=97Z+L*F+*=&:) N#F3*=&9) >8ҕ+:=+*9DMͨ+Õ+ͨ+897ҧ+*9"8!=p+q*="=*=&9) =l7+!=8+*=DM:4OL**="=Ҵ+:9=O!9 N!9 !9 l7*87"=L**=DM_*L*:8B,_*L**8DM_*U,*8DM_*L*_*!=6>!=o,L*!=4Z,*8"9:9Ҍ, - - -!=6:9=!=,*=&9 ~2=,*=&9) 97, -î,:,v-,7-!=4‘,*8*=9 8, -,:= $l7DM*9MF?#9*9*9&9) 9l7*9i*9&9) N#F*9*9DM!<6@#!<6*9"9*9M :9œ#*9*9"9û#*9&9) 9l7*9&9) q#p:9#!<6*9&9) N#F̈́ *9"9>!98:9H*$:9 $=@6*$*9&9) 9l7"9:929!96:9>$i);$*$!t=6>!t=ڝ$*t=&9) *t=&9) l7*t=&9) q#p*t=&9) q#p*t=&9) >w#6:t=<2t=C$997ү$*9"9:ҿ$͘*8"9 :9/29:8$d!!w=s+p+q:w=%*9*u="u=:9$!w=6%$ - -,!=q*=M**9#"9=971- -- -*=&9) ^#V"9>9 8u-ͅ*=&9) {7"=-͚"9H-*=&b;) N#F*; ~Ҷ-*; DM4*; *;##N#Fq#p-*;##q#p2=:=.*=&9) {7"="8:=O>-"8-2=->9͎7>7".) .=*9DM\4\4:8ZA.. \v9 -I.:e y..*8&ͺ7) DMe -q.:8ʇ.:82\\͠4:8 ¥.. 8\ -.!"9}2=2=v* .:8Z.. \v9 -..e) -.:8.:82\\͠4!"9}2=$*w=&9) u=l7+s#r*9&9) N#F*9ͮ?%*u=DM*w=Mkg%*9&9) N#F*u=*w=*9  !x=q:x=ځ%́>!x=ڍ%͐:x=›%ͣ!7&:x=©%!7&:x=·%#7&:97&:x==O!& ^#V!7&7&"7&Q=7&-"7&͕"7&"7&j#7&@#7&x#7&#7&%%%%%%%%%& &&&!y=6i)`&i)2{=:9]&*{=M à&i)2z=‡&i)2y=:y=҄&*y=Mr%à&8"|=:9Ҡ&*|=DM*z=$:y=8&ʯ&ä&!968&&õ&!96!"9"9:u9='*s97"9"9. P9\ -&i)2N9!h $$hͻ"9997Ҍ/͙/͕H{/DM/ )!=6H!=[/:==O! *9N):=<2=3/:=<2=v/ ) ){/ )d9w7+s#r/ ) ) .!=q> !=ڳ/:=0O)þ/:= AO)!=q:=O͚/:=O͚/!=p+q*=|OͿ/*=}OͿ/*=!͛7"=*=!͛7!=s:h.0:=2h\5.0\5͒4*=!͛7!|s*87"=. \8 -S0:8m0*="=\4/TB\4!=s*=!͛7TB "8*8*8s#r/TB*=&ͺ7DM\4:j2j\4:80*8͇7"8:AZ081>0$GMORY OVERFLOW, USE [A] SWITCH$INSUFFICIENT MEMORY$OVERLAPPING SEGMENTS$   XXABS $$$XXPROG $$$XXDATA $$$XXCOMM $$$ 9-:\::YYABS $$$ YYPROG $$$$D181>0!=q.*= :=w*= ~!=q*= :=w*= *= ^#VN#F) *= 6*=^#V!͛7"=͝7!=s&1!=ʮ1*= DM4*=M/1*= DM5<®1ͪ4*=!͛7M1*=  *= 71*=  *= N#Fq#p *= ~ 2*= DM͠4 *= 6b1*= N#F*= *= N#F4?1!=p+q*= N#F*=͝7ͼ7*=q#p*=*= l7+*=##q#p*=*= N#F^#V͝7*= s#r *= N#F`i"=*= N#F `i"=*="===72*=+*= ^#Vͺ7DM52ͽ1*="=Һ2*= ^#V*=ͺ7DM$I YYDATA $$$ YYCOMM $$$ ::;:; INDEX ERR$-52*=  *= 73b1*= N#F*= *= N#F4!=s+p+q*==7s3 *= ~e3ͽ1*=DM5233*=##=73 *= ~ґ3ͽ1*=DM52:=3*=  *= N#FPY83͔2333*=  *= 73?133!=p+q*="=!=s+p+q*=DMB3*= ^#V"=*= N#F*=͝7*=:=w *= 6!=p+q*=DMB3*= ^#V"=*= N#F*=͝7*=~   ĉ4{>.̉4s4OͲp45@6646<5@645<>45<5͒45<5@6! w #4>4>25"5"5$u}eOR$MULTIPLE DEFINITION: $MAIN MODULE ERROR$FIRST COMMON NOT LARGEST$COMMON ERROR$UNRECOGNIZED ITEM $/$yo`"5!"555@6*5|v5 "5*5MD*6*5DM:5I565@6b56b5*5|v55*5͒4*5"5*5#"55*6*5ABORTED$NO SPACE$NO FILE: $CANNOT CLOSE$DISK READ ERROR: $DISK WRITE ERROR$YYYP   YP*6YPYPYPYPYPYP Ͳ ò!=6#65"=*=|‚6>8 8"=##*= ~6!=6â6*=|6!=616"=â6!=6:=ҷ6!=6#6#66*=~2=*= ~2=:=6:=2=*= ~2=!=6>!=7*=&= ~/*=$ $c&9 w!=4697"9 *9"= *9"9*G9M *H9M *I9M *=M *=M *=M *="9i`N#Fog_og_{ozg_ogDM!>))덑o|gҴ7 =¢7DM!>))7 =7_{ozg^#V) 7^#V|g}o 7_{ozgi`N!#Fogo&og_{_z#WE) LINK 1.3 $?MEMRY$MEMRYX  ME %%'ÞCOPYRIGHT (C) 1980 DIGITAL RESEARCH COPYRIGHT (C) 1981, 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*"%|) >>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:n2n%D̀*":*. 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*!*"%O!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::%'*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\%::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%W* ^#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**M0*"!6}!6:'҄Çͭ1Ҙ**͇H* >͘ҿ:'/**M*0} <_1K!6%  !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ͣ ʹè%~#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&+ %%r!q!6!6*"ʹ!""!o8ͣ >͍J!"ͼҍ*~(c͆Ç*~_[],()!q: > :a/>z!/H:_2:!p+q*^#V"*##^#V"!6 !6+6:W: Q!6l<*6+: m+_Ax!!6Aڙ:ڐ!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`:$*D%%M͐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_%;è COPYRIGHT (C) 1980 DIGITAL RESEARCH @: 5@%!COPYRIGHT (C) 1981, DIGITAL RESEARCH 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*&*%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 E% zR"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=%RROR$APDCentry 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(5PABORTED$DISK READ ERROR$DISK WRITE ERROR$CANNOT CLOSE$DIRECTORY FULL$NO FILE: $ &&8G!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~ š62:4*3s#r2(5294*3#"%5͇%ͩ$@*3"5":(42:32(5Ģ >24*3"32(5 ͉r!Q4wM&ͻ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*.&G>=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%!".!/&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|ʉIB0>%%O%O: 5%*55%ý:5ʽ: 5O*5*5ESS͎2O=>O͎2N=#y{&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͎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}&{- :)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  @& 4ʩ##~<2x3G*#5###"%5:w37> ͺ!w3~w7>w> ͺ:w3Pd!5^!K4~ B!~624(02w3%!>%|_}_> ͺ!w3~w:x3ʜ=͢%ͺ!w34È*#5^#V"#5!y35:24(0!^4!K4w>R0>V0>D>P>L>O>B>S>N08!u~ڇK6N4!E s#r!U :mw* 5!] s#r!t~ ڹ6K^4!1w!;p!u~K!5N!E ~#fo!U ~2n!] ^#V"p&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 & &K2oo&) ^#fkN]ivKzV{K>ɯo>g"!6ů{_zW5>)D*OxGғ !?uDM!xGyOڱò)â͝ddJ)=J|g}o=2o2o*p"rOxKxGyKxGy0KG*p*r}|K\\z{W¢Ü}|ڜâWʜllyWœâ!!#Qzg{ozg{ozg{ol&:oO:n2m*p" 52n2ox:4&P#!>!!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&: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&~wN#Fq#p>B0!4"%*%F# #2P"*#5##~G=#w#6#w]$*5!4n& {ozg"#5!5{#z$"5f$*5!4N#yʦ$ ~Ù$f$!U3"Q"/$:P"%*5!3{#z"#5%_!U3*#5~#~&%~#$"5ÿ$&%!%*A1&6>%: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~&&SYMBOL TABLE OVERFLOW *#5###w*#5###~,#*#5_####&%s#r&%^#V&%##"%5F%wF%~#!4~l%6~=ͫ%ͫ%!4N#~ͫ% y%͢%͢%2P"623y"!v36*5"3$"32:4*W"#5GJ2:42942(524> 2S(0>24ɯ242T!4~@`65!^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:& *XXCHGXTHLENDIFEXITMEXTRNLOCALMACROSTKLNTITLECOMMONINPAGEMACLIBPUBLIC7 PF FPA A A* A A A(#&&#&2#/?&#' '( v'( %:P!@"<& #*)&# PP%27&#(&#  $ %*%"$  NZZ NCC POPEP M a{xʑ(_BH!f(4D(#ƒ( p({ڍ(KR(CR(<:4 JCR:4(ʿ((!46 4(!4(# ( ɯ<:4O=_.)!D'F!%V#fjQM()&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 ''D2%!%^#Vo&)O~#F͔(ͨ(xGyѯ*ÿ*:?*ÿ*:@*ÿ*~x/~# *> x/\ '_U  MXList WAITING FOR PRINTER $PRINTER READY $'?-$-w#+!\64 #+>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'$ Z&'-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 '''o+.!+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:B1o''gw!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'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' _ !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~# '!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í!"#: ((w *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*(F3O3*# 72gl*<"?'w#-!9~sG~#s4! 9~.Y+60e0e6 #M+r>o&9y>o&90w+Š6./G! >0 >-3T]))(!/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"(6iO>`G>0 <  DM0 > Ew#E~#X~#W #Ý!9Oo>gy~#o>gxGGtwF#"WObk++~+ y~#/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!>46z"!4*<@*<"r2<:E4:<>2<>2<*~!>)< D=M)6ɯo>g{ozg!dÄlmnpr Conversion2!Ä*%=|^#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;}|;{(:Gt!^<<xy;!<8!<5!<͛#E!<͛!<5:22%^}2<:!4*<@*<"!4*<@*<"2<*t!<͆!<4!<͆( =i`~sw#r##q#p i`N#F#^#V~;q4#p+i`##s#rA"]" FREE Request Out-of-Range$ Free Space Overwrite$GKҜ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(\^#V^#V  $ "/  Later CP/M or MP/M Version Required$*#=**#={ozgY|g}o!\!l!ÍÝ3>Ý!*3>K* !*   >    !"#$%(^#V^#V (r(}>: >?I!oͤͤ>=I^#V|A}8.))ä#F>A> #\~ >.~ =M^#V# File: Traceback: ERROR FIXED OVERFLOW OVERFLOW UNDERFLOW ZERO DIVIDE END OF FILE UNDEFINED FILE KEYNULCONCONRDRPUNLSTBADG!]#~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 E(xPd$PlPRINTER busy XREF 1.3 no SYM file no PRN file CP/M PRNXRFABORTED. : V́ +  1@+>(yJnd of Execution$#dd(Copyright (c) 1980 Digital Research V1.32 MXList SYM(=3  FG1"z*QS cE5T @(( t///@,,D,B,G-,Q/D,D,L-,D,D,N-P-L-N-P-G-@,I-P/O/Q/G-I-D,000//D,symbol table overflow ' invalid SYM file format ( )l):  { *$'"symbol table reference overflow N 22i2)AlXRF.XRF make error  '.XRF close error .XRF write error <<<_<<b-"8-2=->9͎7>7".) .=*9DM\4\4:8ZA.. \v9 -I.:e y..*8&ͺ7) DMe -q.:8.:82\\͠4:8 ¥.. 8\ -.!"9}2=2=v* .:8Z.. \v9 -..e) -.:8.:82\\͠4!"9}2=))hͻ"9997Ҍ/͙/͕H{/DM/ )!=6H!=[/:==O! *9N):=<2=3/:=<2=v/ ) ){/ )d9w7+s#r/ ) ) .!=q> !=ڳ/:=0O)þ/:= AO)!=q:=O͚/:=O͚/!=p+q*=|OͿ/*=}OͿ/*=!͛7"=*=!͛7!=s:h.0:=2h\5.0\5͒4*=!͛7!|s*87"=. \8 -S0:8m0*="=\4/TB\4!=s*=!͛7TB "8*8*8s#r/TB*=&ͺ7DM\4:j2j\4:80*8͇7"8:AZ081>0)) ; INTEL 8085 MACRO LIBRARY ; ; THE SIM (SET INTERRUPT MASK), ; AND RIM (READ INTERRUPT MASK) ; ARE DEFINED BY THE FOLLOWING MACROS: ; SIM MACRO ;; SET INTERRUPT MASK FROM REG-A VALUE DB 30H ;;OPCODE FOR SIM ENDM ; RIM MACRO ;; READ INTERRUPT4 MASK TO REG-A DB 20H ;;OPCODE FOR RIM ENDM ; &GENSYS COMJGHILOAD COMJMPMLDR COM-KLLINK COMzMNOP) ))-52*=  *= 73b1*= N#F*= *= N#F4!=s+p+q*==7s3 *= ~e3ͽ1*=DM5233*=##=73 *= ~ґ3ͽ1*=DM52:=3*=  *= N#FPY83͔2333*=  *= 73?133!=p+q*="=!=s+p+q*=DMB3*= ^#V"=*= N#F*=͝7*=:=w *= 6!=p+q*=DMB3*= ^#V"=*= N#F*=͝7*=~   ĉ4{>.̉4s4OͲp45@6646<5@645<>45<5͒45<5@6! w #4>4>25"5"5)OR$MULTIPLE DEFINITION: $MAIN MODULE ERROR$FIRST COMMON NOT LARGEST$COMMON ERROR$UNRECOGNIZED ITEM $徃*+O| -:PF -:0V2 08D9 ALV3 097D ALV4 0AA1 BSCEND 0A21 BSCTBL 0AA1 BUFF1 0FBB CON00 101D CON01 107F CON02 0853 CSV1 0896 CSV2 08D9 CSV3 097D CSV4 159B DIRBUF 1447 LDB100 1475 LDB101 14B7 LDB510 14F5 LDB511 13FF MPT 1215 PAT 1421 PDB000 0F49 SIOPT1 0AA1 SYSIN2 0853 SYSIN3 0D78 ATNINT 0F95 CENPTR 12AC INTXR 1)_yo`"5!"555@6*5|v5 "5*5MD*6*5DM:5I565@6b56b5*5|v55*5͒4*5"5*5#"55*6*5?\ABORTED$NO SPACE$NO FILE: $CANNOT CLOSE$DISK READ ERROR: $DISK WRITE ERROR$YYYP   YP*6YPYPYPYPYPYP Ͳ ò!=6#65"=*=|‚6>8 8"=##*= ~6!=6â6*=|6!=616"=â6!=6:=ҷ6!=6#6#66*=~2=*= ~2=:=6:=2=*= ~2=!=6>!=7*=&= ~/*=)29A INTXSI 11EE PTXDOS 0D04 REDINT 0CA4 WRTINT 10EA PDISP 1155 SELBNK 10E7 SWTSYS 10E4 SWTUSR 10F0 SYSDAT 120F PTLB 0000 BSCTB1 15CC EXIT "158B BPBPL 1575 BPT 017E DIVIDE 1567 DMABPB4@1@7@!O@@@@"@%@(@+@.@1@4@7@:@=@@@C@F@I@L@@6~#T@ MPM 2.1 setup menu, select function by number $ 1) Copy bootfile to hard disk $ 2) Change default logical nam.es $ 3) Console baud rate setup $ 4) Print)0&9 w!=4697"9 *9"= *9"9*G9M *H9M *I9M *=M *=M *=M *="9i`N#Fog_og_{ozg_ogDM!>))덑o|gҴ7 =¢7DM!>))7 =7_{ozg^#V) 7^#V|g}o 7_{ozgi`N!#Fogo&og_{_z#W6\ *F*6'QFU LINK 1.3 $?MEMRY$MEMRYXTEMPXIOSSPR?ME); @CHK MACRO USED FOR CHECKING 8 BIT DISPLACMENTS ; @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 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)=}MMORY OVERFLOW, USE [A] SWITCH$INSUFFICIENT MEMORY$OVERLAPPING SEGMENTS$ $TEMPXIOS OB6XIOS2H  .Pïï3?FPBNX PBXXABS $$$  PFXXPROG $$$ PfXXDATA $$$ P~XXCOMM $$$ 9-:\::YYABS $$$ YYPROG $$$)  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 )? YYDATA $$$ YYCOMM $$$ ::;:;   ,!ï>s T*T>HCԅÁjfvR}Ђʅ|ʃ`~w+$0ڀH<灔j"7_kʄք H`\ 0<.^ 889  WU!UINDEX ERR **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 *=H 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 DB 18H,?N-$-1 ENDM JRC MACRO ?N DB 38H,?N-$-1 ENDM JRNC MACRO ?N DB 30H,?N-$-1 ENDM JRZ MAC*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*RO ?N DB 28H,?N-$-1 ENDM JRNZ MACRO ?N DB 20H,?N-$-1 ENDM DJNZ MACRO ?N DB 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 END*t ?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 SBCX MACRO ?D @CHK ?D DB 0DDH,9EH,?D ENDM SBCY MACRO ?D @CHK ?D DB 0FDH,9EH,?D ENDM ANDX MACRO ?D @CHK ?D DB 0DDH,0A6H,?D ENDM ANDY MACRO ?D @CHK ?D DB 0FDH,0A6H,?D ENDM XORX MACRO ?D @CHK ?D DB 0DDH,0AEH,?D ENDM XORY MACRO ?D @CHK ?D DB 0FDH,0AEH,?D ENDM ORX MACRO ?D @C*M 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, *HK ?D DB 0DDH,0B6H,?D ENDM ORY 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,5* 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 *TEH 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+80 *`*. @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 8wV!LR."F% -˜."I% -¨!L.F%" -.I%" -R."@% -!w "#V *#N#F `*; MACRO LIBRARY FOR BASIC INTERSECTION ; ; GLOBAL DEFINITIONS FOR DEBUG PROCESSING TRUE EQU 0FFFFH ;VALUE OF TRUE FALSE EQU NOT TRUE;VALUE OF FALSE DEBUG SET FALSE ;INITIALLY FALSE BDOS EQU 5 ;ENTRY TO CP/M BDOS RCHAR EQU 1 ;READ CHARACTER FUNCTION WBUFF EQU 9 ;WRITE BUFFER FUNCTION CR EQU 0DH ;CARRIAGE RETURN LF EQU 0AH ;LINE FEED ; ; INPUT/OUTPUT PORTS FOR LIGHT AND CLOCK LIGHT EQU 00H ;TRAFFIC LIGHT CONTROL CLOCK EQU 03H ;24 HOUR CLOCK (0,1,...,23) ; ; BIT POSITIONS FOR TRAFFIC LIGHT CONT*i"#D:! !L# !L!>%"#*#^#V"#*:"&͇#U o !]6 k. #͵@%" -j . #͵F%" -‡ . #͵L%" -¤ !"=% +|µ R!LR"*L.=%" - .?% $ - R.(#A% - :!. "6L.=%" -# R7WxBo V 11Wo *SDMo V v!1q*1&!3p+q*2 !5p+q*4#6:Pғ *4 *4#N! *46!7p+q *6 6 *6 6*6!9p+q*8!;p+q*:!=p+q*<*ROL NSBITS EQU 4 ;NORTH SOUUTH BITS EWBITS EQU 0 ;EAST WEST BITS ; ; CONSTANT VALUES FOR THE LIGHT CONTROL OFF EQU 0 ;TURN LIGHT OFF RED EQU 1 ;VALUE FOR RED LIGHT YELLOW EQU 2 ;VALUE FOR YELLOW LIGHT GREEN EQU 3 ;GREEN LIGHT ; SETLITE MACRO DIR,COLOR ;; SET LIGHT GIVEN BY "DIR" TO COLOR GIVEN BY "COLOR" IF DEBUG ;;PRINT INFO AT CONSOLE LOCAL SETMSG,PASTMSG MVI C,WBUFF ;;WRITE BUFFER FUNCTION LXI D,SETMSG CALL BDOS ;;WRITE THE TRACE INFO JMP PASTMSG SETMSG: DB CR,LF DB '&DIR CHANGI*!?p+q*>!Ap+q*@. Fo V !Cp+q*BL Vo V !Ep+q*Dj go V  *D 6!Gp+q*F!Ip+q*H!ʡ vo V !Kp+q*J"ʿ o V !Mp+q*L#!Op+q*N$ _  _ ! $q: $ > : $a/>z! $/H : $_2 $: $!$s+q:$2$ *$&͇ *$& :$O!> ~w!$s+q:$2$ *$&͇ *$& :$O!> ~/w!$s+q *$&͇ :$O :$O!> ~!$p+q(_ *$~ Y_ N_ o " :" **NG TO &COLOR$' PASTMSG: EXITM ENDIF MVI A,COLOR SHL DIR&BITS ;;READIED OUT LIGHT ;;SENT IN PROPER BIT POSITION ENDM ; TIMER MACRO SECONDS ;; CONSTRUCT INLINE TIME-OUT LOOP LOCAL T1,T2,T3 ;;LOOP ENTRIES MVI D,4*SECONDS ;;BASIC LOOP CONTROL T1: MVI B,250 ;;250MSEC *4 = 1 SEC T2: MVI C,182 ;;182*5.5USEC = 1MSEC T3: DCR C ;;1 CY = .5 USEC JNZ T3 ;;+10 CY = 5.5 USEC DCR B ;;COUNT 250,249... JNZ T2 ;;LOOP ON B REGISTER DCR D ;;BASIC LOOP CONTROL JNZ T1 ;;LOOP ON D REGISTER ;; ARRIV*D"M Y*$w!$q:$O!. N_ :$O!. N_ !$p+q _  _ *$|O *$}O H_ !$q*$&͇DM9 !$s+q(_ !$6:$ #_ !$60:$dڰ !$6+4:$d2$Ö :$ *$M_ !$60:$ !$6+4:$ 2$ :$ *$M_ :$0O_ *$M o !$$s+p+q+p+q:"# *"$6:'$<2'$O!" N 2&$ :&$,[*"$#""$6!%$6:&$#k!%$6 :&$02&$:%$> !&$Hң>!&$Ҟ:&$2&$ã!&$6!%$:&$*"$^*%$&͇*&$& s!&$6*"$6o *"$6( * $DMo * $~ \(_ ** tE HERE WITH APPROXIMATELY "SECONDS" ;; TIMEOUT, CONTINUE PROCESSING. ENDM ; CLOCK? MACRO LOW,HIGH,IFTRUE ;; CHECK FOR REAL-TIME CLOCK GREATER THAN OR ;; EQUAL TO "LOW." AND LESS THAN "HIGH." ;; CONTINUE AT "IFTRUE" WHEN BETWEEN THESE ;; TIMES. LOCAL IFFALSE ;;ALTERNATE TO TRUE CASE IN CLOCK ;;READ REAL-TIME CLOCK IF NOT NUL HIGH ;;CHECK HIGH CLOCK CPI HIGH ;;EQUAL OR GREATER? JNC IFFALSE ;;SKIP TO END IF SO ENDIF CPI LOW ;;LESS THAN LOW VALUE? JNC IFTRUE ;;SKIP TO LABEL IF NOT IFFA*"$N !'$6>!'$J*"$#""$:'$:!/H7*"$6C,_ *"$N !'$4 *"$+++""$o g*"$N*$$t !%$6!'$6" V V !w "#^#V"6"V ͯ Ÿ@ *#>w#6!t V ͢ >"t *#>w#6V ͢ !!:!o&)*#q#p]#t V ͢ "t *#N#F+q#pV ͢ =%t *#*#s#rV ̈́ .(K%# -V ͢ V ! 6!t z / >"t z / z !($6>!($ړ::"2)$>!)$ډ*($M*)$ :)$<2)$k:($<2($\: =2($!{"||O: 2 : 2)$:($!)$*)$ :)$<2)$³o * M_ ! :($!!::%=2:%*:%M_ :!O_ ::%2"+a+ TO TRUE LABEL IFFALSE: ENDM 0+:!|o !;%6:!=!;%Q*:%&͇*;%&@͇ͮ*;%&") q#p:;%<2;%::%=2:%>!!h::%=2:%*:%M_ :!O_ #o ::%=2!*!M_ 9 2o !<%6<% :<%/Ҷ:!<2! :!2 >! *  : <2 :!2 :!: =2 *  >!!: =2 *  :!E: =2 *  >!!E: =2 *  : =2 *  : 2!Zo V ͯ sV  V M =%ͺ#͟" :]$µ*^M A2P*_M R2Qý!P6#6* }|2!=%2"*:=!* DM!=%++W:ƀ2\: gxL {=?:\;>\2\5 !~#o}oH !|* w# Z* }ʆ|* ͷ=}!~ʕ4* "ͷ*:=2™!V !5 !|CqDM!>))덑o|gv =d^#V))) DM!>))Җ =Ž^#V|g}o Ÿ_{ozgi`N#Fogo&og++ME MPM SYS SYSTEM DAT  RSP $ BRS$&+ +; MACRO LIBRARY FOR STREET TREADLES ; TRINP EQU 01H ;TREADLE INPUT PORT TROUT EQU 01H ;TREADLE OUTPUT PORT ; TREAD? MACRO TR,IFTRUE ;; "TREAD?" IS INVOKED TO CHECK IF ;; TREADLE GIVEN BY TR HAS BEEN SENSED. ;; IF SO, THE LATCH IS CLEARED AND CONTROL ;; TRANSFERS TO THE LABEL "IFTRUE" LOCAL IFFALSE ;;IN CASE NOT SET ;; IN TRINP ;;READ TREADLE SWITCHES ANI 1 SHL TR ;;MASK PROPER BIT JZ IFFALSE ;;SKIP RESET IF 0 MVI A,1 SHL TR ;;TO RESET THE BIT OUT TROUT ;;CLEAR IT JMP IFTRUE ;;GO +++6Y: !2 6=21 á:1 : r+s#r==_HL"4 " >6 ͪS* "6 =23 :1 =21 v=O* #" Y8  ͝҉* +"8 .!2 ʞR̀* "4 4 = ͝* #" çR*6 DM+R*8 DM+R*: DM+R*< M!? q=  ͝Kd*= ! ͸p!@ 6>!@ X*= }O!< *@ & w*= #"= !@ 4)!< 4\mad* }O!< :? wlR*4 DM+{R* DM+R 4 ͝*4 }¿= 4 ͝< N*4 #"4  å;*4 DM+: Y2++SA 0O> :A 0:A AO>&R̀:A A H.2B !2 w:B !D s+q*C &͍:D _og_{ozg^#V) _{ozgi`N#Fogo&og_{_z#W+++; MACRO LIBRARY FOR PEDESTRIAN PUSHBUTTONS ; CWINP EQU 00H ;INPUT PORT FOR CROSSWALK ; PUSH? MACRO IFTRUE ;; "PUSH?" JUMPS TO LABEL "IFTRUE" WHEN ANY ONE ;; OF THE CROSSWALK SWITCHES IS DEPRESSED. THE ;; VALUE HAS BEEN LATCHED, AND READING THE PORT ;; CLEARS THE LATCHED VALUES IN CWINP ;;READ THE CROSSWALK SWITCHES ANI (1 SHL CWCNT) - 1 ;;BUILD MASK JNZ IFTRUE ;;ANY SWITCHES SET? ;; CONTINUE ON FALSE CONDITION ENDM %+ +8: 0O! q: O: O! p+q* |O* }O! p+q*  f! p+q* DMB! p+q)R* DMB1B* DM+;! p+q* i2 ! p+q* i2 ! p+q* i2 i2 !" p+q*! f!$ p+q*# i!& p+q*% i!( p+q*' i2 !* p+q*) f!/ s+p+q+p+q:/ =2/ X*+ *- w*+ #"+ *- #"- 1* #" ͖r*   ~!" ! ͸×* " x20 º*   DM":0 Ad*   6!" Ç!" : !"6 "8 ": }2< !"4 "= !  ,,,,,,; MACRO LIBRARY FOR SIMPLE I/O BDOS EQU 0005H ;BDOS ENTRY CONIN EQU 1 ;CONSOLE INPUT FUNCTION MSGOUT EQU 9 ;PRINT MESSAGE TIL $ CR EQU 0DH ;CARRIAGE RETURN LF EQU 0AH ;LINE FEED ; READ MACRO VAR ;; READ A SINGLE CHARACTER INTO VAR MVI C,CONIN ;CONSOLE INPUT FUNCTION CALL BDOS ;CHARACTER IS IN A STA VAR ENDM ; WRITE MACRO MSG ;; WRITE MESSAGE TO CONSOLE LOCAL MSGL,PMSG JMP PMSG MSGL: DB CR,LF ;;LEADING CRLF DB '&MSG' ;;INLINE MESSAGE DB '$' ;;MESSAGE TERMINATOR PMSG: MVI C,MSGOUT,,:8 ;;PRINT MESSAGE TIL $ LXI D,MSGL CALL BDOS ENDM $B Library for simple 8-bit comparison operations NCOMPARE.LIB 8-bit comparisons with negation WHEN.LIB Macros for the WHEN construct (see manual) DOWHILE.LIB Macros for the DOWHILE contstruct SELECT.LIB Macros for the SELECT construct LDRBIOS.ASM Sample Loader BIOS for MP/M II MPMLDR BOOT.ASM Sample Boot for MP/M II DEBLOCK.ASM Sample Deblocking algorithm for MP/M I, ,EI TODCNV.ASM Sample Time & Date Conversion for MP/M II RESXIOS.ASM Sample Resident XIOS for MP/M II DUMP.ASM Sample PRL for MP/M II EXTRN.ASM Sample External module for DUMP.ASM " ,V,,G FILLFCB MACRO FID,DN,FN,FT,BS,BA ;; FILL THE FILE CONTROL BLOCK WITH DISK NAME ;; FID IS AN INTERNAL NAME FOR THE FILE, ;; DN IS THE DRIVE NAME (A,B..), OR BLANK ;; FN IS THE FILE NAME, OR BLANK ;; FT IS THE FILE TYPE ;; BS IS THE BUFFER SIZE ;; BA IS THE BUFFER ADDRESS LOCAL PFCB ;; ;; SET UP THE FILE CONTROL BLOCK FOR THE FILE ;; LOOK FOR FILE NAME = 1 OR 2 @C SET 1 ;;ASSUME TRUE TO BEGIN WITH IRPC ?C,FN ;;LOOK THROUGH CHARACTERS OF NAME IF NOT ('&?C' = '1' OR '&?C' = '2') @C SET 0 ;;,; SEQUENTIAL FILE I/O LIBRARY ; FILERR SET 0000H ;REBOOT AFTER ERROR @BDOS EQU 0005H ;BDOS ENTRY POINT @TFCB EQU 005CH ;DEFAULT FILE CONTROL BLOCK @TBUF EQU 0080H ;DEFAULT BUFFER ADDRESS ; ; BDOS FUNCTIONS @MSG EQU 9 ;SEND MESSAGE @OPN EQU 15 ;FILE OPEN @CLS EQU 16 ;FILE CLOSE @DIR EQU 17 ;DIRECTORY SEARCH @DEL EQU 19 ;FILE DELETE @FRD EQU 20 ;FILE READ OPERATION @FWR EQU 21 ;FILE WRITE OPERATION @MAK EQU 22 ;FILE MAKE @REN EQU 23 ;FILE RENAME @DMA EQU 26 ;SET DMA ADDRESS ; @SECT EQU 128 ,iCLEAR IF NOT 1 OR 2 ENDM ;; @C IS TRUE IF FN = 1 OR 2 AT THIS POINT IF @C ;;THEN FN = 1 OR 2 ;; FILL FROM DEFAULT AREA IF NUL FT ;;TYPE SPECIFIED? @C SET 12 ;;BOTH NAME AND TYPE ELSE @C SET 9 ;;NAME ONLY ENDIF FILLDEF FCB&FID,(FN-1)*16,@C ;;TO SELECT THE FCB JMP PFCB ;;PAST FCB DEFINITION DS @C ;;SPACE FOR DRIVE/FILENAME/TYPE FILLNAM FT,12-@C ;;SERIES OF DB'S ELSE JMP PFCB ;;PAST INITIALIZED FCB IF NUL DN DB 0 ;;USE DEFAULT DRIVE IF NAME IS ZERO ELSE DB '&DN'-'A'+1 ;;USE SP,;SECTOR SIZE EOF EQU 1AH ;END OF FILE CR EQU 0DH ;CARRIAGE RETURN LF EQU 0AH ;LINE FEED TAB EQU 09H ;HORIZONTAL TAB ; @KEY EQU 1 ;KEYBOARD @CON EQU 2 ;CONSOLE DISPLAY @RDR EQU 3 ;READER @PUN EQU 4 ;PUNCH @LST EQU 5 ;LIST DEVICE ; ; KEYWORDS FOR "FILE" MACRO INFILE EQU 1 ;INPUT FILE OUTFILE EQU 2 ;OUTPUTFILE SETFILE EQU 3 ;SETUP NAME ONLY ; ; THE FOLLOWING MACROS DEFINE SIMPLE SEQUENTIAL ; FILE OPERATIONS: ; FILLNAM MACRO FC,C ;; FILL THE FILE NAME/TYPE GIVEN BY FC FOR C CHARACTERS @CNT,wECIFIED DRIVE ENDIF FILLNAM FN,8 ;;FILL FILE NAME ;; NOW GENERATE THE FILE TYPE WITH PADDED BLANKS FILLNAM FT,3 ;;AND THREE CHARACTER TYPE ENDIF FCB&FID EQU $-12 ;;BEGINNING OF THE FCB DB 0 ;;EXTENT FIELD 00 FOR SETFILE ;; NOW DEFINE THE 3 BYTE FIELD, AND DISK MAP DS 20 ;;X,X,RC,DM0...DM15,CR FIELDS ;; IF FID&TYP<=2 ;;IN/OUTFILE ;; GENERATE CONSTANTS FOR INFILE/OUTFILE FILLNXT ;;@NXTB=0 ON FIRST CALL IF BS+0<@SECT ;; BS NOT SUPPLIED, OR TOO SMALL @BS SET @SECT ;;DEFAULT TO ONE SECT, SET C ;;MAX LENGTH IRPC ?FC,FC ;;FILL EACH CHARACTER ;; MAY BE END OF COUNT OR NUL NAME IF @CNT=0 OR NUL ?FC EXITM ENDIF DB '&?FC' ;;FILL ONE MORE @CNT SET @CNT-1 ;;DECREMENT MAX LENGTH ENDM ;;OF IRPC ?FC ;; ;; PAD REMAINDER REPT @CNT ;;@CNT IS REMAINDER DB ' ' ;;PAD ONE MORE BLANK ENDM ;;OF REPT ENDM ; FILLDEF MACRO FCB,?FL,?LN ;; FILL THE FILE NAME FROM THE DEFAULT FCB ;; FOR LENGTH ?LN (9 OR 12) LOCAL PSUB JMP PSUB ;;JUMP PAST THE SUBROUTINE @DEF: ;;THIS SUBROUTINE FIL, OR ELSE ;; COMPUTE EVEN BUFFER ADDRESS @BS SET (BS/@SECT)*@SECT ENDIF ;; ;; NOW DEFINE BUFFER BASE ADDRESS IF NUL BA ;; USE NEXT ADDRESS AFTER @NXTB FID&BUF SET BUFFERS+@NXTB ;; COUNT PAST THIS BUFFER @NXTB SET @NXTB+@BS ELSE FID&BUF SET BA ENDIF ;; FID&BUF IS BUFFER ADDRESS FID&ADR: DW FID&BUF ;; FID&SIZ EQU @BS ;;LITERAL SIZE FID&LEN: DW @BS ;;BUFFER SIZE FID&PTR: DS 2 ;;SET IN INFILE/OUTFILE ;; SET DEVICE NUMBER @&FID SET @NXTD ;;NEXT DEVICE @NXTD SET @NXTD+1 ENDIF ;;O,LS FROM THE TFCB (+16) MOV A,M ;;GET NEXT CHARACTER TO A STAX D ;;STORE TO FCB AREA INX H INX D DCR C ;;COUNT LENGTH DOWN TO 0 JNZ @DEF RET ;; END OF FILL SUBROUTINE PSUB: FILLDEF MACRO ?FCB,?F,?L LXI H,@TFCB+?F ;;EITHER @TFCB OR @TFCB+16 LXI D,?FCB MVI C,?L ;;LENGTH = 9,12 CALL @DEF ENDM FILLDEF FCB,?FL,?LN ENDM ; FILLNXT MACRO ;; INITIALIZE BUFFER AND DEVICE NUMBERS @NXTB SET 0 ;;NEXT BUFFER LOCATION @NXTD SET @LST+1 ;;NEXT DEVICE NUMBER FILLNXT MACRO ENDM ENDM ; -H- F FID&TYP<=2 TEST PFCB: ENDM ; FILE MACRO MD,FID,DN,FN,FT,BS,BA ;; CREATE FILE USING MODE MD: ;; INFILE = 1 INPUT FILE ;; OUTFILE = 2 OUTPUT FILE ;; SETFILE = 3 SETUP FCB ;; (SEE FILLFCB FOR REMAINING PARAMETERS) LOCAL PSUB,MSG,PMSG LOCAL PND,EOD,EOB,PNC ;; CONSTRUCT THE FILE CONTROL BLOCK ;; FID&TYP EQU MD ;;SET MODE FOR LATER REF'S FILLFCB FID,DN,FN,FT,BS,BA IF MD=3 ;;SETUP FCB ONLY, SO EXIT EXITM ENDIF ;; FILE CONTROL BLOCK AND RELATED PARAMETERS ;; ARE CREATED INLINE, NOW CRE-ECK MOV A,L ;;0000? ORA H MVI A,EOF ;;END OF FILE? RZ ;;ZERO FLAG IF SO LDAX D ;;NEXT CHAR IN ACCUM ELSE ;; STORE NEXT CHARACTER FROM ACCUMULATOR POP PSW ;;RECALL SAVED CHAR STAX D ;;CHARACTER IN BUFFER ENDIF LHLD FID&PTR ;;INDEX TO GET/PUT INX H SHLD FID&PTR ;;POINTER UPDATED ;; RETURN WITH NON ZERO FLAG IF GET RET ;; PSUB: ;;PAST INLINE SUBROUTINE XRA A ;;ZERO TO ACC STA FCB&FID+12 ;;CLEAR EXTENT STA FCB&FID+32 ;;CLEAR CUR REC LXI H,FID&SIZ ;;BUFFER SIZE SHLD FID&-ATE IO FUNCTION JMP PSUB ;;PAST INLINE SUBROUTINE IF MD=1 ;;INPUT FILE GET&FID: ELSE PUT&FID: PUSH PSW ;;SAVE OUTPUT CHARACTER ENDIF LHLD FID&LEN ;;LOAD CURRENT BUFFER LENGTH XCHG ;;DE IS LENGTH LHLD FID&PTR ;;LOAD NEXT TO GET/PUT TO HL MOV A,L ;;COMPUTE CUR-LEN SUB E MOV A,H SBB D ;;CARRY IF NEXT ;; SKIP ALL BUT OUTPUT FILES IF ?F&TYP=2 LOCAL EOB?,PEOF,MSG,PMSG ;; WRITE ALL PARTIALLY FILLED BUFFERS EOB?: ;;ARE WE AT THE END OF A BUFFER? LHLD ?F&PTR ;;NEXT TO FILL MOV A,L ;;ON BUFFER BOUNDARY? ANI (@SECT-1) AND 0FFH JNZ PEOF ;;PUT EOF IF NOT 00 IF @SECT>255 ;; CHECK HIGH ORDER BYTE ALSO MOV A,H ANI (@SECT-1) SHR 8 JNZ PEOF ;;PUT EOF IF NOT 00 ENDIF ;; ARRIVE HERE IF END OF BUFFER, SET LENGTH ;; AND WRITE ONE MORE BYTE TO CLEAR BUFFS SHLD ?F&L-BDOS ;;ERROR TO CONSOLE POP PSW ;;REMOVE STACKED CHARACTER JMP FILERR ;;USUALLY REBOOTS EMSG: DB CR,LF DB 'DISK FULL: &FID' DB '$' ENDIF ;; EOB: ;; END OF BUFFER, RESET DMA AND POINTER LXI D,@TBUF MVI C,@DMA CALL @BDOS LXI H,0 SHLD FID&PTR ;;NEXT TO GET ;; PNC: ;; PROCESS THE NEXT CHARACTER XCHG ;;INDEX TO GET/PUT IN DE LHLD FID&ADR ;;BASE OF BUFFER DAD D ;;ADDRESS OF CHAR IN HL XCHG ;;ADDRESS OF CHAR IN DE IF MD=1 ;;INPUT PROCESSING DIFFERS LHLD FID&LEN ;;FOR EOF CH --&EN ;;SET TO SHORTER LENGTH PEOF: MVI A,EOF ;;WRITE ANOTHER EOF PUSH PSW ;;SAVE ZERO FLAG CALL PUT&?F POP PSW ;;RECALL ZERO FLAG JNZ EOB? ;;NON ZERO IF MORE ;; BUFFERS HAVE BEEN WRITTEN, CLOSE FILE MVI C,@CLS LXI D,FCB&?F ;;READY FOR CALL CALL @BDOS INR A ;;255 IF ERR BECOMES 00 JNZ PMSG ;; FILE CANNOT BE CLOSED MVI C,@MSG LXI D,MSG CALL @BDOS JMP PMSG ;;ERROR MESSAGE PRINTED MSG: DB CR,LF DB 'CANNOT CLOSE &?F' DB '$' PMSG: ENDIF ENDM ;;OF THE IRP ENDM ; ERASE MACRO-- FID ;; DELETE THE FILE(S) GIVEN BY FID IRP ?F, MVI C,@DEL LXI D,FCB&?F CALL @BDOS ENDM ;;OF THE IRP ENDM ; DIRECT MACRO FID ;; PERFORM DIRECTORY SEARCH FOR FILE ;; SETS ZERO FLAG IF NOT PRESENT LXI D,FCB&FID MVI C,@DIR CALL @BDOS INR A ;00 IF NOT PRESENT ENDM ; RENAME MACRO NEW,OLD ;; RENAME FILE GIVEN BY "OLD" TO "NEW" LOCAL PSUB,REN0 ;; INCLUDE THE RENAME SUBROUTINE ONCE JMP PSUB @RENS: ;;RENAME SUBROUTINE, HL IS ADDRESS OF ;;OLD FCB, DE IS ADDRESS OF NEW FCB --PUSH H ;;SAVE FOR RENAME LXI B,16 ;;B=00,C=16 DAD B ;;HL = OLD FCB+16 REN0: LDAX D ;;NEW FCB NAME MOV M,A ;;TO OLD FCB+16 INX D ;;NEXT NEW CHAR INX H ;;NEXT FCB CHAR DCR C ;;COUNT DOWN FROM 16 JNZ REN0 ;; OLD NAME IN FIRST HALF, NEW IN SECOND HALF POP D ;;RECALL BASE OF OLD NAME MVI C,@REN ;;RENAME FUNCTION CALL @BDOS RET ;;RENAME COMPLETE PSUB: RENAME MACRO N,O ;;REDEFINE RENAME LXI H,FCB&O ;;OLD FCB ADDRESS LXI D,FCB&N ;;NEW FCB ADDRESS CALL @RENS ;;RENAME SUBROUTINE END-,SIZ MACRO SIZE ;; SET "ORG" AND CREATE STACK LOCAL STACK ;;LABEL ON THE STACK ORG 100H ;;AT BASE OF TPA LXI SP,STACK JMP STACK ;;PAST STACK DS SIZE*2 ;;DOUBLE PRECISION STACK: ENDM ; DUP MACRO ;; DUPLICATE TOP OF STACK PUSH H ENDM ; SUM MACRO ;; ADD THE TOP TWO STACK ELEMENTS POP D ;;TOP-1 TO DE DAD D ;;BACK TO HL ENDM ; LSR MACRO LEN ;; LOGICAL SHIFT RIGHT BY LEN REPT LEN ;;GENERATE INLINE XRA A ;;CLEAR CARRY MOV A,H RAR ;;ROTATE WITH HIGH 0 MOV H,A MOV A,L RAR-M RENAME NEW,OLD ENDM ; GET MACRO DEV ;; READ CHARACTER FROM DEVICE IF @&DEV <= @LST ;; SIMPLE INPUT MVI C,@&DEV CALL @BDOS ELSE CALL GET&DEV ENDM ; *- 8 MOV L,A ;;BACK WITH HIGH BIT ENDM ENDM ; ADC0 EQU 1080H ;A-D CONVERTER 0 ADC1 EQU 1082H ;A-D CONVERTER 1 ADC2 EQU 1084H ;A-D CONVERTER 2 ADC3 EQU 1086H ;A-D CONVERTER 3 ; DAC0 EQU 1090H ;D-A CONVERTER 0 DAC1 EQU 1092H ;D-A CONVERTER 1 DAC2 EQU 1094H ;D-A CONVERTER 2 DAC3 EQU 1096H ;D-A CONVERTER 3 ; RDM MACRO ?C ;; READ A-D CONVERTER NUMBER "?C" PUSH H ;;CLEAR THE STACK ;; READ FROM MEMORY MAPPED INPUT ADDRESS LHLD ADC&?C ENDM ; WRM MACRO ?C ;; WRITE D-A CONVERTER NUMBER "?C" - ..> SHLD DAC&?C ;;VALUE WRITTEN POP H ;;RESTORE STACK ENDM !8=28<:8ڕ*8&))8 ^#V"8  ^#V"9*9DM!86#~͌ . v9\ -:9 .9 -:8v9p4*9~=͌ :8&^'*9~(*9~)H\*9~,L<͌ :8Y^'&:8tͻ'͈(!863!A"9͌ . v9\ -†*9~=͌ í.9 -¥:8ҷ^'*9~*9~(H*9~,<͌ :8^'÷B>:8͑'ͻ.`i77!;p+q*;";^#V";K*; ~y*;##>8IK3*; DM4*; DM4*; *;##N#Fq#pÄ*;##q#p*9#^#V*9 ^#V*9 ^#V*9~*9~*9>*9~*9 ^#V*9 ^#V!;p+q*9#*;s#r!;p+q*9 *;s#r!;p+q*9 *;s#r!;q*9>:;Hw!;q*9>:;Hw!;q*9>:;Hw!;q*9>:;Hw!;p+q*9 *;s#r!;p+q*9 *;s#r!;s+p+q!";*;&9) ^#V"9>7>ͅ; 8*9"9*;#";͚"9>7.'6:8͈(:8:8H,!"8:828*8"83*9~(ˆ*9~ʈl;*9~)h~V*9~*9~(H҅<G:8ʓ<*Ͳ!6~5*& 6:[],()?$!t;q:t; $> :t;aO>8:t;_2t;:t;!A"u;9u;7{*u;NOͲ*u;~&q Ͳ Ͳ*Ͳ*u;#"u;B@6!w;6> !w;ڪ*w;& :s;£>!w;4‡>*9#"9*9N2s;&íͭ:s; ͭ!s;6 !y;6+6:y; :y; !s;6Ͱ .5~sH12!  |E*(+V+^#^#V>"( #^#V+V+^+V+^"F^#V"8^#V##~<2>"4*8####"6:>O:2ʷ͉:2<22q:2A2<*6:2O N>*4 ^#V^#V":ͨ!"B^#V{3":# ^:#~(,  .!\6͂ !!y;6͂6 :y;- !Ͱ ͭ :s;:| :\:y;HZ !:]A<2\O>n !*y;&\ 6 ì !y;6:s;.¨ ͭ͂ڨ :y; ڟ !Ͱ ͭÌ ! :y;<2y;O!\ :s;w:s;0O> :s;02s;> :s;AO> :s;A 2s;>>!"z;ͭ͂. % *z;))))*s;& "z;( <ͭ *z;:s;AO>/ͭ2 O :s;A<<ͭ2 d :s;A<:s;Zo >Z<ͭ:s;XO>چ :s;<:s;]:s; HҀ :s;S¸ !96ͭ} :s;P !96 "9} :s;D !96 "9} :s;L "8} :s;M .*B ú *:~( ( *:*:!~_~W>M~_>!0M~_>!:M *:!t~_~W>M!\~_~W>M P*:~*!~"_~#W>M~$_>!M~%_>!M!~!͑ *: *: F  *: N    {H  23 =(p#R >!B0 = {/_z/W}0wz+!35 ͛#0:w!N#Fy( *:B ~(#ü:<wë+*:s#r#:<w Drive(s) $ Floppy $ Hard. "8} :s;OZ ͭ:s;P! !86T :s;C1 !86T :s;RA !86T :s;SQ !86T <ͭ} :s;Am !6ͭ} :s;Q€ !86ͭ} :s;G !96ͭ!96͂ڿ >!9Ҩ <*9&9 :s;w!94ͭÕ } :s;$F :s;,:s;]HC :s;C s 28= :s;I > 28= :s;L > 28= :s;O) S 28= :s;S: S 28= < } :s;Nz ͭ:s;La !86Zt :s;Rq !86Zt <ͭ} <Ê :s; ʋ ͭ!967¡ <:s; ¬ :s;[· ͊ :s; *q9#"q9!s98 !"q9?*s9DMP94*q9? ~ !N92|; !. ;Rdisk $ Virtual $ offline $xxxxx cylinders, xx heads, xx sectors per track $  2xxxxx Temporary errors, xxxxx Permanent errors $  E Last error address: Cylinder xxxxx, Head xx, Sector xx, Status xx$  O Type was $Permanent $Temporary $/ Write$/ Read$ $ ALTOS DISK STATUS v1.02 $`.O92}; :};ր2};!|;4 2~; !96 2;S *9&9 :;w:9<29P <@6& *|;&ͺ7*};& ";!J98/L9;7/HҤ J9;7ͺ7*~;& +"9 !h:|; :|;2h\5 <@6!|6:};2|*~;&+"9*s9"q9 >!9 !96ͣ!:9T Ͱ& *; ~,*; DM͠4*; 6*;N#F*; *; N#F4!;q*;##N#F*; :;w*;##N#F+q#p*; 8ډ *;##>w#6!;p+q*;}OK*;|OK*;N#F*; *; N#F4*;##N#F+q#p*; 8͡*;##>w#6*;##N#F*; ~O .D.s]" B@"@D $H @ BD! !" $!HB  B%>( fnRtu44~(( :oJFp~ (>~ 2o . |E "!*~} | 4 MG ?"  MP/M II V2.1 Loader Copyright (C) 1981, Digital Research $COPYRIGHT (C) 1981, DIGITAL RESEARCH Dsk rd err$ Synchronization: Serial numbers do not match$ ?$Nmb of consoles = $ Breakp.jww:oJ>^ * ( fn^#V! ^#V r+s4ޯ~ݾ>~w:oJ>~w2pG ߰ ~w>)Sy"{L!t7:pJG Ox東ȯ!r5 6!q5 P>>)S"L!7:pJG>!r5 6!q5  z> ìg>2r>2q~%?ݶ%!6>2s x((::s= >(yϿ(yχuLmM'u#V +s#rBKz w!", ð@*g& " \o͙a !*\ \ +|£9 1, *, DM!vv!. q*. & !0 p+q*/.N} 47 ")j#]P 7egdC     ?$@D]~22!^|G !} !####0t1tt2t~(!{N#F#^q#Vp!{s#rV#^#QY7? Altos CP/M 2.24F0$5.     !2 p+q*1  !4 p+q*3  !6 p+q*5    !7 q!9 6+60:7 dT!9 6+4+~dw=:9 g*8 M!8 60:7 ~!9 6+4+~ wg:9 Ҍ*8 M:7 0O!: q> !: ұ:: A Oú:: 0O!; q:; O͖:; O͖!= p+q  *< |Oͻ*< }OͻH!@ s+p+q!A 6:@ =!A ,*A &*> >O!A 4 !C p+q*B DM !I r+s+p+q+p+q*D DM-*F DM*H DM&!M s+q+p+q*J *L & *M & >!Q r+s+p+q!R 6#6:R <2R O*N :S <2S O*P ë>!R >P .. L>#H!", ð*P #"P ã*V DMV X DM&\z M.  -<!{ ", ðz [ðz oð*\& "\ "V *]M͖*^M͖*V DM>:]=:_:k==2*cMk=!d:cN_kH!g:dN_k:! 6*Z" * & ) * s#r> ʇ: <2 * ^#V" W*g& * & ) q#p: =2 .* & ) > ##DMd -d * & ) O!. /Z/ * & )  N#F>áS!i:hN_k^!j:iN_ki!N:jN_kt!S:NN_k:T ! 6*V" * & ) * s#r> ʍ: <2 * ##" * ^#V" U*S& * & ) q#p: =2  .* & ) > DMo -o * & ) O! * & )  N#F>ç:U2  :S2 ! |O: 2 ! : N_k:]` : 2 !]: 2 ! : N_k!" !b 6:k=!b * DM!" *b &))l N`i DM*b &))l  N`i DM:` *b &))l  N1/SAGE 'PR' AT CONSOLE IF DEBUGP ;;PRINT DEBUG ON? LOCAL PMSG,MSG ;;LOCAL MESSAGE JMP PMSG ;;AROUND MESSAGE MSG: DB CR,LF ;;RETURN CARRIAGE DB '&PR$' ;;LITERAL MESSAGE PMSG: PUSH H ;;SAVE TOP ELEMENT OF STACK LXI D,MSG ;;LOCAL MESSAGE ADDRESS MVI C,WBUFF ;;WRITE BUFFER 'TIL $ CALL BDOS ;;PRINT IT POP H ;;RESTORE TOP OF STACK ENDIF ;;END TEST DEBUGP ENDM ; UGEN MACRO ;; GENERATE UTILITIES FOR TRACE OR DUMP LOCAL PSUB JMP PSUB ;;JUMP PAST SUBROUTINES @CH: ;;WRITE CHARACTER IN R/r&:b <2b r ! : ! !:\ !", ð: *w ! 6!\" * #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6t * >2 !l"  * ~S*  ~YH * ~SHҿ . * DMz -· _og^#V))) DM!>)) = ^#V) O{ozgi`N#Fogo&og*w ! 6!\"· #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6??RSP??BRSMPM SYS G~SHҿ . * DMz -· _og^#V))) DM!>))/EG-A MOV E,A MVI C,WCHAR JMP BDOS ;;RETURN THRU BDOS ;; @NB: ;;WRITE NIBBLE IN REG-A ADI 90H DAA ACI 40H DAA JMP @CH ;;RETURN THRU @CH ;; @HX: ;;WRITE HEX VALUE IN REG-A PUSH PSW ;;SAVE LOW BYTE RRC RRC RRC RRC ANI 0FH ;;MASK HIGH NIBBLE CALL @NB ;;PRINT HIGH NIBBLE POP PSW ANI 0FH JMP @NB ;;PRINT LOW NIBBLE ;; @AD ;;WRITE ADDRESS VALUE IN HL PUSH H ;;SAVE VALUE MVI A,' ' ;;LEADING BLANK CALL @CH ;;AHEAD OF ADDRESS POP H ;;HIGH BYTE TO A MOV A,H PUSH H ;/ = ^#V) O{ozgi`N#Fogo&og*w ! 6!\"· #~ 8 * #~$z * ##~Bt ! 6* ~ g ! 6??RSP??BRSMPM SYS ~SHҿ . * DMz -· _og^#V))) DM!>)) = ^#V) O{ozg "{2p!"9"12z2x!y%K!D _^#V       W[*MDy! ͻ ! õ ! õ ! ͻ o:A2  yy Bdos Err On : $B/;COPY BACK TO STACK CALL @HX ;;WRITE HIGH BYTE POP H MOV A,L ;;LOW BYTE JMP @HX ;;WRITE LOW BYTE ; @IN: ;;READ HEX VALUE TO HL FROM CONSOLE MVI A,' ' ;;LEADING SPACE CALL @CH ;;TO CONSOLE LXI H,0 ;;STARTING VALUE @IN0: PUSH H ;;SAVE IT FOR CHAR READ MVI C,RCHAR ;;READ CHARACTER FUNCTION CALL BDOS ;;READ TO ACCUMULATOR POP H ;;VALUE BEING BUILT IN HL SUI '0' ;;NORMALIZE TO BINARY CPI 10 ;;DECIMAL? JC @IN1 ;;CARRY IF 0,1,...,9 ;; MAY BE HEXADECIMAL A,...,F SUI 'A'-'0'-10 CPI /ad Sector$Select$File R/O$:!  2>:> :y!4 5~yU5 6y $ $:a $ $ $O[y [*MDy! ͻ ! õ ! õ ! ͻ oA^#V! ! ! !  w#:O|^#V#"M##"O##"Q##"j!S*U![*`|!w6/6>!hN#F*Ow#w*Qw#w'!N#F*Q^#V*O~#foyx*[{_zW+i*[yxڑ#*hDM*Os#r*Qs#ryOxG*j0MD!!]N:} G>O:| */ 16 ;;A THROUGH F? RNC ;;RETURN WITH ASSUMED CR @IN1: ;;IN RANGE, MULTIPLY BY 4 AND ADD REPT 4 DAD H ;;SHIFT 4 ENDM ORA L ;;ADD DIGIT MOV L,A ;;AND REPLACE VALUE JMP @IN0 ;;FOR ANOTHER DIGIT ;; PSUB: UGEN MACRO ;; REDEF TO INCLUDE ONCE . ENDM UGEN ;;GENERATE FIRST TIME ENDM ; **K* ; * END OF TRACE/DUMP UTILITIES * ; * BEGIN TRACE(ONLY) UTILITIES * ; **8* TRACE MACRO CODE,MNAME ;; TRACE MACRO GIVEN BY MNAME/!.; MACRO LIBRARY FOR A ZERO ADDRESS MACHINE ; **'* ; * BEGIN TRACE/DUMP UTILITIES * ; *** BDOS EQU 0005H ;SYSTEM ENTRY RCHAR EQU 1 ;READ A CHARACTER WCHAR EQU 2 ;WRITE CHARACTER WBUFF EQU 9 ;WRITE BUFFER TRAN EQU 100H ;TRANSIENT PROGRAM AREA DATA EQU 1100H ;DATA AREA CR EQU 0DH ;CARRIAGE RETURN LF EQU 0AH ;LINE FEED ; DEBUGT SET 0 \;;TRACE DEBUG SET FALSE DEBUGP SET 0 ;;PRINT DEBUG SET FALSE ; PRN MACRO PR ;; PRINT MES //0, ;; AT LOCATION GIVEN BY CODE LOCAL PSUB UGEN ;;GENERATE UTILITIES JMP PSUB @T1: DS 2 ;;TEMP FOR REG-1 @T2: DS 2 ;;TEMP FOR REG-2 ;; @TR: ;;TRACE MACRO CALL ;; BC=CODE ADDRESS, DE=MESSAGE SHLD @T1 ;;STORE TOP REG POP H ;;RETURN ADDRESS XTHL ;;REG-2 TO TOP SHLD @T2 ;;STORE TO TEMP PUSH PSW ;;SAVE FLAGS PUSH B ;;SAVE RET ADDRESS MVI C,WBUFF ;;PRINT BUFFER FUNC CALL BDOS ;;PRINT MACRO NAME POP H ;;CODE ADDRESS CALL @AD ;;PRINTED LHLD @T1 ;;TOP OF STACK CALL @AD ;;PRINTED /[AGE PMSG: ADR ?V ;;HL=ADDRESS ACTIVE SET 0 ;;CLEAR ACTIVE FLAG LXI D,MSG ;;MESSAGE TO PRINT IF NUL ?N ;;USE LENGTH 1 MVI C,1 ELSE MVI C,?N ENDIF CALL @DM ;;TO PERFORM THE DUMP ENDM ;;END OF REDEFINITION DMP VNAME,N ENDM ; ; **J* ; * END DUMP (ONLY) UTILITIES, * ; * BEGIN STACK MACHINE OPCODES * ; **m* ACTIVE SET 0 ;ACTIVE REGISTER FLAG ; SIZ MACRO SIZE ORG TRAN ;;SET TO TRANSIENT AREA ;; CREATE A STAC/W LHLD @T2 ;;TOP-1 CALL @AD ;;PRINTED POP PSW ;;FLAGS RESTORED POP D ;;RETURN ADDRESS LHLD @T2 ;;TOP-1 PUSH H ;;RESTORED PUSH D ;;RETURN ADDRESS LHLD @T1 ;;TOP OF STACK RET ;; PSUB: ;;PAST SUBROUTINES ;; TRACE MACRO C,M ;; REDEFINED TRACE, USES @TR LOCAL PMSG,MSG JMP PMSG MSG: DB CR,LF ;;CR,LF DB '&M$' ;;MAC NAME PMSG: LXI B,C ;;CODE ADDRESS LXI D,MSG ;;MACRO NAME CALL @TR ;;TO TRACE IT ENDM ;; BACK TO ORIGINAL MACRO LEVEL TRACE CODE,MNAME ENDM ; TRT MACRO F ;; T/5K WHEN "XIT" ENCOUNTERED @STK SET SIZE ;;SAVE FOR DATA AREA LXI SP,STACK ENDM ; SAVE MACRO ;; CHECK TO ENSURE "ENTER" PROPERLY SET UP IF STACK ;;IS IT PRESENT? ENDIF SAVE MACRO ;;REDEFINE AFTER INITIAL REFERENCE IF ACTIVE ;;ELEMENT IN HL PUSH H ;;SAVE IT ENDIF ACTIVE SET 1 ;;SET ACTIVE ENDM SAVE ENDM ; REST MACRO ;; RESTORE THE TOP ELEMENT IF NOT ACTIVE POP H ;;RECALL TO HL ENDIF ACTIVE SET 1 ;;MARK AS ACTIVE ENDM ; CLEAR MACRO ;; CLEAR THE TOP ACTIVE ELEMENT REST /hURN ON FLAG "F" DEBUG&F SET 1 ;;PRINT/TRACE ON ENDM ; TRF MACRO F ;; TURN OFF FLAG "F" DEBUG&F SET 0 ;;TRACE/PRINT OFF ENDM ; ?TR MACRO M ;; CHECK DEBUGT TOGGLE BEFORE TRACE IF DEBUGT TRACE %$,M ENDM ; **I* ; * END TRACE (ONLY) UTILITIES * ; * BEGIN DUMP(ONLY) UTILITIES * ; *** DMP MACRO VNAME,N ;; DUMP VARIABLE VNAME FOR ;; N ELEMENTS (DOUBLE BYTES) LOCAL PSUB ;;PAST SUBROUTINES UGEN ;;GEN INLINE ROUTIN/ ;;ENSURE ACTIVE ACTIVE SET 0 ;;CLEARED ENDM ; DCL MACRO VNAME,SIZE ;; LABEL THE DECLARATION VNAME: IF NUL SIZE DS 2 ;;ONE WORD REQ'D ELSE DS SIZE*2 ;;DOUBLE WORDS ENDM ; LIT MACRO VAL ;; LOAD LITERAL VALUE TO TOP OF STACK SAVE ;;SAVE IF ACTIVE LXI H,VAL ;;LOAD LITERAL ?TR LIT ENDM ; ADR MACRO BASE,INX,CON ;; LOAD ADDRESS OF BASE, INDEXED BY INX, ;; WITH CONSTANT OFFSET GIVEN BY CON SAVE ;;PUSH IF ACTIVE IF NUL INX&CON LXI H,BASE ;;ADDRESS OF BASE EXITM ;;SIMPLE AD/(ES JMP PSUB ;;PAST LOCAL SUBROUTINES @DM: ;;DUMP UTILITY PROGRAM ;; DE=MSG ADDRESS, C=ELEMENT COUNT ;; HL=BASE ADDRESS TO PRINT PUSH H ;;BASE ADDRESS PUSH B ;;ELEMENT COUNT MVI C,WBUFF ;;WRITE BUFFER FUNC CALL BDOS ;;MESSAGE WRITTEN @DM0: POP B ;;RECALL COUNT POP H ;;RECALL BASE ADDRESS MOV A,C ;;END OF LIST? ORA A RZ ;;RETURN IF SO DCR C ;;DECREMENT COUNT MOV E,M ;;NEXT ITEM (LOW) INX H MOV D,M ;;NEXT ITEM (HIGH) INX H ;;READY FOR NEXT ROUND PUSH H ;;SAVE PRINT ADDRESS / @DRESS ENDIF ;; MUST BE INX AND/OR CON IF NUL INX LXI H,CON*2 ;;CONSTANT ELSE LHLD INX ;;INDEX TO HL DAD H ;;DOUBLE PRECISION INX IF NOT NUL CON LXI D,CON*2 ;;DOUBLE CONST DAD D ;;ADDED TO INX ENDIF ;;NOT NUL CON ENDIF ;;NUL INX LXI D,BASE ;;READY TO ADD DAD D ;;BASE+INX*2+CON*2 ENDM ; VAL MACRO B,I,C ;; GET VALUE OF B+I+C TO HL ;; CHECK SIMPLE CASE OF B ONLY IF NUL I&C SAVE ;;PUSH IF ACTIVE LHLD B ;;LOAD DIRECTLY ELSE ;; "ADR" PUSHES ACTIVE REGISTERS ADR B,I,C /PUSH B ;;SAVE COUNT XCHG ;;DATA READY CALL @AD ;;PRINT ITEM VALUE JMP @DM0 ;;FOR ANOTHER VALUE ;; @DT: ;;DUMP TOP OF STACK ONLY PRN <(TOP)=> ;;"(TOP)=" PUSH H CALL @AD ;;VALUE OF HL POP H ;;TOP RESTORED RET ;; PSUB: ;; DMP MACRO ?V,?N ;; REDEFINE DUMP TO USE @DM UTILITY LOCAL PMSG,MSG ;; SPECIAL CASE IF NULL PARAMETERS IF NUL VNAME ;; DUMP THE TOP OF THE STACK ONLY CALL @DT EXITM ENDIF ;; OTHERWISE DUMP VARIABLE NAME JMP PMSG MSG: DB CR,LF ;;CRLF DB '&?V=$' ;;MESS 00;;ADDRESS IN HL MOV E,M ;;LOW ORDER BYTE INX H MOV D,M ;;HIGH ORDER BYTE XCHG ;;BACK TO HL ENDIF ?TR VAL ;;TRACE SET? ENDM ; STO MACRO B,I,C ;; STORE THE VALUE OF THE TOP OF STACK ;; LEAVING THE TOP ELEMENT ACTIVE IF NUL I&C REST ;;ACTIVATE STACK SHLD B ;;STORED DIRECTLY TO B ELSE ADR B,I,C POP D ;;VALUE IS IN DE MOV M,E ;;LOW BYTE INX H MOV M,D ;;HIGH BYTE ENDIF CLEAR ;;MARK EMPTY ?TR STO ;;TRACE? ENDM ; SUM MACRO REST ;;RESTORE IF SAVED ;; ADD THE TOP T0ED INPUT ADDRESS LHLD ADC&?C ENDIF ?TR RDM ;;TRACING? ENDM ; WRM MACRO ?C ;; WRITE D-A CONVERTER NUMBER "?C" REST ;;RESTORE STACK IF DEBUGP ;;TRACE THE OUTPUT RWTRACE ,% DAC&?C UGEN ;;INCLUDE SUBROUTINES CALL @AD ;;WRITEc THE VALUE ENDIF SHLD DAC&?C ?TR WRM ;;TRACING OUTPUT? CLEAR ;;REMOVE THE VALUE ENDM ; **"* ; * END OF MACRO LIBRARY * ; *** 0 WO STACK ELEMENTS POP D ;;TOP-1 TO DE DAD D ;;BACK TO HL ?TR SUM ENDM ; DIF MACRO ;; COMPUTE DIFFERENCE BETWEEN TOP ELEMENTS REST ;;RESTORE IF SAVED POP D ;;TOP-1 TO DE MOV A,E ;;TOP-1 LOW BYTE TO A SUB L ;;LOW ORDER DIFFERENCE MOV L,A ;;BACK TO L MOV A,D ;;TOP-1 HIGH BYTE SBB H ;;HIGH ORDER DIFFERENCE MOV H,A ;;BACK TO H ;; CARRY FLAG MAY BE SET UPON RETURN ?TR DIF ENDM ; LSR MACRO LEN ;; LOGICAL SHIFT RIGHT BY LEN REST ;;ACTIVATE STACK REPT LEN ;;GENERATE INLINE 0ogDM!>))덑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 E0'XRA A ;;CLEAR CARRY MOV A,H RAR ;;ROTATE WITH HIGH 0 MOV H,A MOV A,L RAR MOV L,A ;;BACK WITH HIGH BIT ENDM ENDM ; GEQ MACRO LAB ;; JUMP TO LAB IF (TOP-1) IS GREATER OR ;; EQUAL TO (TOP) ELEMENT. DIF ;;COMPUTE DIFFERENCE CLEAR ;;CLEAR ACTIVE ?TR GEQ JNC LAB ;;NO CARRY IF GREATER ORA H ;;BOTH BYTES ZERO? JZ LAB ;;ZERO IF EQUAL ;; DROP THROUGH IF NEITHER ENDM ; DUP MACRO ;; DUPLICATE THE TOP ELEMENT IN THE STACK REST ;;ENSURE ACTIVE PUSH H ?TR DUP ENDM ; BRN 0RROR$APDCentry 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(5PABORTED$DISK READ ERROR$DISK WRITE ERROR$CANNOT CLOSE$DIRECTORY FULL$NO FILE: $0MACRO ADDR ;; BRANCH TO ADDRESS JMP ADDR ENDM ; XIT MACRO ?TR XIT ;;TRACE ON? JMP 0 ;;RESTART AT 0000 ORG DATA ;;START DATA AREA DS @STK*2 ;;OBTAINED FROM "SIZ" STACK: ENDM ; ; **&* ; * MEMORY MAPPED I/O SECTION * ; *** ; INPUT VALUES WHICH ARE READ AS IF IN MEMORY ADC0 EQU 1080H ;A-D CONVERTER 0 ADC1 EQU 1082H ;A-D CONVERTER 1 ADC2 EQU 1084H ;A-D CONVERTER 2 ADC3 EQU 1086H ;A-D CONVERTER 3 ; DAC0 EQU 1090H0 0 ;D-A CONVERTER 0 DAC1 EQU 1092H ;D-A CONVERTER 1 DAC2 EQU 1094H ;D-A CONVERTER 2 DAC3 EQU 1096H ;D-A CONVERTER 3 ; RWTRACE MACRO MSG,ADR ;; READ OR WRITE TRACE WITH MESSAGE ;; GIVEN BY "MSG" TO/FROM "ADR" PRN ENDM ; RDM MACRO ?C ;; READ A-D CONVERTER NUMBER "?C" SAVE ;;CLEAR THE STACK IF DEBUGP ;;STOP EXECUTION IN DDT RWTRACE ,% ADC&?C UGEN ;;ENSURE @IN IS PRESENT CALL @IN ;;VALUE TO HL SHLD ADC&?C ;;SIMULATE MEMORY INPUT ELSE ;; READ FROM MEMORY MAPP 0=00gw!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:10; MACRO LIBRARY FOR 8-BIT COMPARISON OPERATION ; TEST? MACRO X,Y ;; UTILTITY MACRO TO GENERATE CONDITION CODES IF NOT NUL X ;;THEN LOAD X LDA X ;;X ASSUMED TO BE IN MEMORY ENDIF IRPC ?Y,Y ;;Y MAY BE CONSTANT OPERAND TDIG? SET '&?Y'-'0' ;;FIRST CHAR DIGIT? EXITM ;;STOP IRPC AFTER FIRST CHAR ENDM IF TDIG? <= 9 ;;Y NUMERIC? SUI Y ;;YES, SO SUB IMMEDIATE ELSE LXI H,Y ;;Y NOT NUMERIC SUB M ;;SO SUB FROM MEMORY ENDM ; LSS MACRO X,Y,TL ;; X LSS THAN Y TEST, ;; TRANSFER TO TL (TRUE 0_ !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~# 0LABEL) IF TRUE, ;; CONTINUE IF TEST IS FALSE TEST? X,Y ;;SET CONDITION CODES JC TL ENDM ; LEQ MACRO X,Y,TL ;; X LESS THAN OR EQUAL TO Y TEST LSS X,Y,TL JZ TL ENDM ; EQL MACRO X,Y,TL ;; X EQUAL TO Y TEST TEST? X,Y JZ TL ENDM ; NEQ MACRO X,Y,TL ;; X NOT EQUAL TO Y TEST TEST? X,Y JNZ TL ENDM ; GEQ MACRO X,Y,TL ;; X GREATER THAN OR EQUAL TO Y TEST TEST? X,Y JNC TL ENDM ; GTR MACRO X,Y,TL ;; X GREATER THAN Y TEST LOCAL FL ;;FALSE LABEL TEST? X,Y JC FL DCR A 0w *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*0ӝ JNC TL FL: ENDM 7!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 !/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"0'*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:B1o 1#1; MACRO LIBRARY FOR 8-BIT COMPARISON OPERATION ; TEST? MACRO X,Y ;; UTILTITY MACRO TO GENERATE CONDITION CODES IF NOT NUL X ;;THEN LOAD X LDA X ;;X ASSUMED TO BE IN MEMORY ENDIF IRPC ?Y,Y ;;Y MAY BE CONSTANT OPERAND TDIG? SET '&?Y'-'0' ;;FIRST CHAR DIGIT? EXITM ;;STOP IRPC AFTER FIRST CHAR ENDM IF TDIG? <= 9 ;;Y NUMERIC? SUI Y ;;YES, SO SUB IMMEDIATE ELSE LXI H,Y ;;Y NOT NUMERIC SUB M ;;SO SUB FROM MEMORY ENDM ; LSS MACRO X,Y,TL,FL ;; X LSS THAN Y TEST, ;; IF TL IS PRESENT, 1 ) )  ) z|ODM|O)Ox>~!>)< D=M)6ɯo>g{ozg!dÄlmnpr Conversion2!Ä*%=|^#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;}|;{1ASSUME TRUE TEST ;; IF TL IS ABSENT, THEN INVERT TEST IF NUL TL GEQ X,Y,FL ELSE TEST? X,Y ;;SET CONDITION CODES JC TL ENDM ; LEQ MACRO X,Y,TL,FL ;; X LESS THAN OR EQUAL TO Y TEST IF NUL TL GEQ X,Y,FL ELSE LSS X,Y,TL JZ TL ENDM ; EQL MACRO X,Y,TL,FL ;; X EQUAL TO Y TEST IF NUL TL NEQ X,Y,FL ELSE TEST? X,Y JZ TL ENDM ; NEQ MACRO X,Y,TL,FL ;; X NOT EQUAL TO Y TEST IF NUL TL EQL X,Y,FL ELSE TEST? X,Y JNZ TL ENDM ; GEQ MACRO X,Y,TL,FL ;; X GREATER THAN1=i`~sw#r##q#p i`N#F#^#V~;q4#p+i`##s#rA"]" FREE Request Out-of-Range$ Free Space Overwrite$GKҜ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#q1 OR EQUAL TO Y TEST IF NUL TL LSS X,Y,FL ELSE TEST? X,Y JNC TL ENDM ; GTR MACRO X,Y,TL,FL ;; X GREATER THAN Y TEST IF NUL TL LEQ X,Y,FL ELSE LOCAL GFL ;;FALSE LABEL TEST? X,Y JC GFL DCR A JNC TL GFL: ENDM    !"#$%(^#V^#V1}>: >?I!oͤͤ>=I^#V|A}8.))ä#F>A> #\~ >.~ =M^#V# File: Traceback: ERROR FIXED OVERFLOW OVERFLOW UNDERFLOW ZERO DIVIDE END OF FILE UNDEFINED FILE KEYNULCONCONRDRPUNLSTBADG!]#~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#^1F3O3*# 72gl*<"?'w#-!9~sG~#s4! 9~.Y+60e0e6 #M+r>o&9y>o&90w+Š6./G! >0 >-3T]))1 4; MACRO LIBRARY FOR "WHEN" CONSTRUCT ; ; "WHEN" COUNTERS ; LABEL GENERATORS GENWTST MACRO TST,X,Y,NUM ;; GENERATE A "WHEN" TEST (NEGATED FORM), ;; INVOKE MACRO "TST" WITH PARAMETERS ;; X,Y WITH JUMP TO ENDW & NUM TST X,Y,,ENDW&NUM ENDM ; GENLAB MACRO LAB,NUM ;; PRODUCE THE LABEL "LAB" & "NUM" LAB&NUM: ENDM ; ; "WHEN" MACROS FOR START AND END ; WHEN MACRO XV,REL,YV ;; INITIALIZE COUNTERS FIRST TIME WCNT SET 0 ;;NUMBER OF WHENS WHEN MACRO X,R,Y GENWTST R,X,Y,%WCNT WLEV SET WCNT ;;NE16iO>`G>0 <  DM0 > Ew#E~#X~#W #Ý!9Oo>gy~#o>gxGGtwF#"WObk++~+ y~#/@1=3  FG1"z*QS cE5T @11t///@,,D,B,G-,Q/D,D,L-,D,D,N-P-L-N-P-G-@,I-P/O/Q/G-I-D,000//D,symbol table overflow ' invalid SYM file format 11; MACRO LIBRARY FOR "DOWHILE" CONSTRUCT ; GENDTST MACRO TST,X,Y,NUM ;; GENERATE A "DOWHILE" TEST TST X,Y,,ENDD&NUM ENDM ; GENDLAB MACRO LAB,NUM ;; PRODUCE THE LABEL LAB & NUM ;; FOR DOWHILE ENTRY OR EXIT LAB&NUM: ENDM ; GENDJMP MACRO NUM ;; GENERATE JUMP TO DOWHILE TEST JMP DTEST&NUM ENDM ; DOWHILE MACRO XV,REL,YV ;; INITIALIZE COUNTER DOCNT SET 0 ;NUMBER OF DOWHILES ;; DOWHILE MACRO X,R,Y ;; GENERATE THE DOWHILE ENTRY GENDLAB DTEST,%DOCNT ;; GENERATE THE CONDITIONAL TEST GE11 NDTST R,X,Y,%DOCNT DOLEV SET DOCNT ;;NEXT ENDD TO GENERATE DOCNT SET DOCNT+1 ENDM DOWHILE XV,REL,YV ENDM ; ENDDO MACRO ;; GENERATE THE JUMP TO THE TEST GENDJMP %DOLEV ;; GENERATE THE END OF A DOWHILE GENDLAB ENDD,%DOLEV DOLEV SET DOLEV-1  ENDM <@1xPd$PlPRINTER busy XREF 1.3 no SYM file no PRN file CP/M PRNXRFABORTED. : V́ +  1@+> 22222O; MACRO LIBRARY FOR "SELECT" CONSTRUCT ; ; LABEL GENERATORS GENSLXI MACRO NUM ;; LOAD HL WITH ADDRESS OF CASE LIST LXI H,SELV&NUM ENDM ; GENCASE MACRO NUM,ELT ;; GENERATE JMP TO END OF CASES IF ELT GT 0 JMP ENDS&NUM ;;PAST ADDR LIST ENDIF ;; GENERATE LABEL FOR THIS CASE CASE&NUM&@&ELT: ENDM ; GENELT MACRO NUM,ELT ;; GENERATE ONE ELEMENT OF CASE LIST DW CASE&NUM&@&ELT ENDM ; GENSLAB MACRO NUM,ELTS ;; GENERATE CASE LIST SELV&NUM: ECNT SET 0 ;;COUNT ELEMENTS REPT ELTS ;;GENER22ATE DW'S GENELT NUM,%ECNT ECNT SET ECNT+1 ENDM ;;END OF DW'S ;; GENERATE END OF CASE LIST LABEL ENDS&NUM: ENDM ; SELNEXT MACRO ;; GENERATE THE NEXT CASE GENCASE %CCNT,%ECNT ;; INCREMENT THE CASE ELEMENT COUNT ECNT SET ECNT+1 ENDM ; SELECT MACRO VAR ;; GENERATE CASE SELECTION CODE CCNT SET 0 ;;COUNT "SELECTS" SELECT MACRO V ;;REDEFINITION OF SELECT ;; SELECT ON V OR ACCUMULATOR CONTENTS IF NOT NUL V LDA V ;;LOAD SELECT VARIABLE ENDIF GENSLXI %CCNT ;;GENERATE THE LXI H,SELV# 2AlXRF.XRF make error  '.XRF close error .XRF write error <<<_<<ba:…#~$…=2a:n2:_/GyO͚͊*s:rOy?x  ¨N͗¨# :2!n~Яw͓>2>2n!rq*"s͓3è ͊6gͨ8PYye Ҁ*`{z҈BKҀT<!* pg Ì *~w͊ ͌ͨù ͊ ͌ͨ3HK ?D DB 0DDH,0B6H,?D ENDM ORY 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,53 ͊%~* ! N!Fwyx>>*w~#+w#w+ɯ2ͨ͊ * :wt~gwm~¬É&&¬#¬ # Y ڣw ~>2l͛!5*!F"͊"!w# ! w͡2l4͊* ~<wG:_!l9 4~D͊9:m2o>2m::}!{tŠ2}:Šʊ VMQ*I:Oc}*IMD͕"I2:p!wÍ>2x*~=2p:2y~2zwͱ:*3TEH 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+803ew!"G"I2!"K[ÍñͽͽJ*"K[:x<*6:z<w:y2pͱ**}Do>2m::}!{tŠ2}:Šʊ VMQ*I:Oc}*IMD͕"I2:p!wÍ>2x*~=2p:2y~2zwͱ:}*w!"G"I2!"K[5> bÇWÜý#>>f* |!@6#| !^|GÃB3=H 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 DB 18H,?N-$-1 ENDM JRC MACRO ?N DB 38H,?N-$-1 ENDM JRNC MACRO ?N DB 30H,?N-$-1 ENDM JRZ MAC3 =r>// y.#2>2M!*!r͗ͤ͜*fn *NS}2*i`NB}^(< "g.<"C|( n&*n >!B0 = {/_z/W*!V^*R V^*R((!6 !r͗2*NV^ [ɓw~ݾ www> 3>ί""fn}!|! N(V ^ V^3 :wn& ^#VO"*}:]*)=:^O:}o"* *!-~2}~2{%:_2|-:oO:}w:{w |g}od*c""V*S# ‡ )Ï:O!͎yoxg*G:Oc}!GN#F͕"G*b*Ms#r ~ͨo$*S:*~6w>2**M{#zr+s{ozg**f$́*W* SͶwN#F$!KU!SU+aU[aM[*S*K!~#3>< N(~~w N(~~w!>2O>2U!X"VNV^fn+ S^"`#>>2N>2M ͤ ?ݶ KT*V:O3>!N5 6!M5 Ͷ N >f n P%S <V R <V KiPCP  !P ɯGOV*V*V*V*x =y~( G#O#Gxy!6#(:Ch y!χrwrw sG  D3Y) INXIX INC IX INX IX Increment IX INXIY INC IY INX IY Increment IY DCXIX DEC IX DCX IX Decrement IX DCXIY DEC IY DCX IY Decrement IY BIT b,r BIT b,r BIT b,r Test bit b in register r SETB b,r SET b,r SET b,r Set bit b in register r RES b,r RES b,r RES b,r Reset bit b in register r BITX b,d BIT b,(IX+d) BIT b,d(IX) Test bit b in memory at m(IX+d) BITY b,d BIT b,(IY+d) BIT b,d(IY) Test bit b in memory at m(IY+d) SE3 3TX b,d SET b,(IX+d) SET b,d(IX) Set bit b in memory at m(IX+d) SETY b,d SET b,(IY+d) SET b,d(IY) Set bit b in memory at m(IY+d) RESX b,d RES b,(IX+d) RES b,d(IX) Reset bit b in memory at m(IX+d) RESY b,d RES b,(IY+d) RES b,d(IY) Reset bit b in memory at m(IY+d) JR addr JR addr-$ JMPR addr Jump relative unconditional JRC addr JR C,addr-$ JRC addr Jump relative if Carry indicator true JRNC addr JR NC,addr-$ JRNC addr Jump relative if carry indicato3 '3r false JRZ addr JR Z,addr-$ JRC addr Jump relative if Zero indicator true JRNZ addr JR NZ,addr-$ JRNZ addr Jump relative if Zero indicator false DJNZ addr DJNZ addr-$ DJNZ addr Decrement B, jump relative if non-zero PCIX JMP (IX) PCIX Jump to address in IX ie, Load PC from IX PCIY JMP (IY) PCIY Jump to address in IY RETI RETI RETI Return from interrupt RETN RETN RETN Return from non-maskable interrupt INP r IN r,(C) INP r I3e XORY d XOR (IY+d) XRA d(IY) Indexed logical exclusive or ORX d OR (IX+d) ORA d(IX) Indexed logical or ORY d OR (IY+d) ORA d(IY) Indexed logical exclusive or CMPX d CP (IX+d) CMP d(IX) Indexed compare CMPY d CP (IY+d) CMP d(IY) Index compare INRX d INC (IX+d) INR d(IX) Increment memory at m(IX+d) INRY d INC (IY+d) INR d(IY) Increment memory at m(IY+d) DCRX d INC (IX+d) INR d(IX) Decrement memory at m(IX+d) DCRY d DEC (IY+d) 3 nput from port C to register r OUTP r OUT (C),r OUTP r Output from register r to port (C) INI INI INI Input from port (C) to m(HL), increment HL, decrement b INIR INIR INIR Input from port (C) to m(HL), increment HL, decrement B, repeat if B <> 0 OUTI OTI OUTI Output from m(HL) to port (C), increment HL, decrement B OUTIR OTIR OUTIR Repeat OUTI until B = 0 IND IND IND Input from port (C) to m(HL), decrement HL & B INDR INDR INDR 3DCR d(IY) Decrement memory at m(IX+d) NEG NEG NEG Negate A (two's complement) IM0 IM0 IM0 Set interrupt mode 0 IM1 IM1 IM1 Set interrupt mode 1 IM2 IM2 IM2 Set interrupt mode 2 DADC rr ADC HL,rr DADC rr Add with carry rr to HL DSBC rr SBC HL,rr DSBC rr Subtract with "borrow" rr from HL DADX rr ADD IX,rr DADX rr Add rr to IX (rr may be BC, DE, SP, IX) DADY rr ADD IY,rr DADY rr Add rr to IY (rr may be BC, DE, SP, I 44 Repeat IND until B = 0 OUTD OTD OUTD Output from m(HL) to port (C), decrement HL & B OUTDR OTDR OUTDR Repeat OUTD until B = 0 RLCR r RLC r RLCR r Rotate left circular register RLCX d RLC (IX+d) RLCR d(IX) Rotate left circular indexed memory RLCY d RLC (IY+d) RLCR d(IY) Rotate left circular indexed memory RALR r RL r RALR r Rotate left arithmetic register RALX d RL (IX+d) RALR d(IX) Rotate left arithmetic indexed memory RALY d R44UL (IY+d) RALR d(IY) Rotate left arithmetic indexed memory RRCR r RRC r RRCR r Rotate right circular register RRCX d RRC (IX+d) RRCR d(IX) Rotate right circular indexed RRCY d RRC (IY+d) RRCR d(IY) Rotate right circular indexed RARR r RR r RARR r Rotate right arithmetic register RARX d RR (IX+d) RARR d(IX) Rotate right arithmetic indexed memory RARY d RR (IY+d) RARR d(IY) Rotate right arithmetic indexed memory SLAR r SLA r SLAR r S44hift left register SLAX d SLA (IX+d) SLAR d(IX) Shift left indexed memory SLAY d SLA (IY+d) SLAR d(IY) Shift left indexed memory SRAR r SRA r SRAR r Shift right arithmetic register SRAX d SRA (IX+d) SRAR d(IX) Shift right arithmetic indexed memory SRAY d SRA (IY+d) SRAR d(IY) Shift right arithmetic indexed memory SRLR r SRL r SRLR r Shift right logical register SRLX d SRL (IX+d) SRLR d(IX) Shift right logical indexed memory SRLY d SRL44  (IY+d) SRLR d(IY) Shift right logical indexed memory RLD RLD RLD Rotate left digit RRD RRD RRD Rotate right digit 64 4 444 out 0f6h ret crtst: ; crt: status in 0f7h ! ani 2 ! rz ori 0ffh ret ttyin: ; tty: input in 0f5h ! ani 2 ! jz ttyin in 0f4h ! ani 7fh ret ttyout: ; tty: output in 0f5h ! ani 1 ! jz ttyout mov a,c ! out 0f4h ret ;ttyst: ; in 0f5h ! ani 2 ! rz ; ori -1 ; ret lptout: ; lpt: output in 0fbh ! ani 1 ! jz lptout mov a,c ! cma ! out 0fah ret lpt$st: in 0fbh ! ani 1 ! rz ori 0ffh ret conin equ crtin const equ crtst conout equ crtout reader equ ttyin punch 4 ; MP/M 2.0 Loader BIOS ; (modified CP/M 2.2 BIOS) ; MDS I/O drivers for CP/M 2.2 ; (single drive, single density) ; -or- ; (single drive, double density) ; Version 2.0 -- Sept 81 vers equ 20 ;version 2.0 ; Copyright (C) 1980, 1981 ; Digital Research ; Box 579, Pacific Grove ; California, 93950 false equ 0 true equ not false asm equ true mac equ not asm sgl equ true dbl equ not sgl if mac maclib diskdef numdsks equ 1 ;number of drives available endif ra4equ ttyout list equ lptout listst equ lptst seldsk: ;select disk given by register c lxi h, 0 ! mov a,c ! cpi num$disks ! rnc ; first, insure good select ani 2 ! sta dbank ; then save it lxi h,sel$table ! mvi b,0 ! dad b ! mov a,m ! sta iof mov h,b ! mov l,c dad h ! dad h ! dad h ! dad h ; times 16 lxi d,dpbase ! dad d ret home: ;move to home position ; treat as track 00 seek mvi c,0 ; settrk: ;set track address given by c lxi h,iot mov m,c ret ; setsec: ;set sector n4<m$top equ 1d00h ; top address+1 bios equ ram$top-0600h ; basic input/output system bdos equ bios-0e00h ; base of the bdos org bios buff equ 0080h ;default buffer address retry equ 10 ;max retries on disk i/o before error ; jump vector for indiviual routines jmp boot wboote: jmp wboot jmp const jmp conin jmp conout jmp list jmp punch jmp reader jmp home jmp seldsk jmp settrk jmp setsec jmp setdma jmp read jmp write jmp list$st ; list status poll jmp sect4umber given by c mov a,c ;sector number to accum sta ios ;store sector number to iopb ret ; setdma: ;set dma address given by regs b,c mov l,c mov h,b shld iod ret sect$tran: ; translate the sector # in if needed mov h,b ! mov l,c ! inx h ; in case of no translation mov a, d ! ora e ! rz xchg ! dad b ; point to physical sector mov l,m ! mvi h,0 ret read: ;read next disk record (assuming disk/trk/sec/dma set) mvi c,readf ;set to read function jmp setfunc ; write4$tran ; sector translation ; we also assume the MDS system has four disk drives numdisks equ 1 ;number of drives available revrt equ 0fdh ;interrupt revert port intc equ 0fch ;interrupt mask port icon equ 0f3h ;interrupt control port inte equ 0111$1110b ;enable rst 0(warm boot), rst 7 (monitor) ; MDS monitor equates rmon80 equ 0ff0fh ;restart mon80 (boot error) ; disk ports and commands base equ 78h ;base of disk command io ports dstat equ base ;disk status (input) rtype equ base+14 Y: ;disk write function mvi c,writf ; setfunc: ; set function for next i/o (command in reg-c) lxi h,iof ;io function address mov a,m ;get it to accumulator for masking ani 1111$1000b ;remove previous command ora c ;set to new command mov m,a ;replaced in iopb ; single density drive 1 requires bit 5 on in sector # ; mask the bit from the current i/o function ani 0010$0000b ;mask the disk select bit lxi h,ios ;address the sector select byte ora m ;select proper disk bank mov m,a ;se4 ;result type (input) rbyte equ base+3 ;result byte (input) ilow equ base+1 ;iopb low address (output) ihigh equ base+2 ;iopb high address (output) readf equ 4h ;read function writf equ 6h ;write function recal equ 3h ;recalibrate drive iordy equ 4h ;i/o finished mask cr equ 0dh ;carriage return lf equ 0ah ;line feed boot: wboot: gocpm: ret crtin: ; crt: input in 0f7h ! ani 2 ! jz crtin in 0f6h ! ani 7fh ret crtout: ; crt: output in 0f7h ! ani 1 ! jz crtout mov a,c ! 55t disk select bit on/off ; waitio: mvi c,retry ;max retries before perm error rewait: ; start the i/o function and wait for completion call intype ;in rtype call inbyte ;clears the controller lda dbank ;set bank flags ora a ;zero if drive 0,1 and nz if 2,3 mvi a,iopb and 0ffh ;low address for iopb mvi b,iopb shr 8 ;high address for iopb jnz iodr1 ;drive bank 1? out ilow ;low address to controller mov a,b out ihigh ;high address jmp wait0 ;to wait for complete iodr1: ;dri5r iopb: ;io parameter block db 80h ;normal i/o operation iof: db readf ;io function, initial read ion: db 1 ;number of sectors to read iot: db 2 ;track number ios: db 1 ;sector number iod: dw buff ;io address ; ; sel$table: if sgl db 00h, 30h, 00h, 30h ; drive select bits endif if dbl db 00h, 10h, 00h, 30h ; drive select bits endif if mac and sgl disks numdisks ; generate drive tables diskdef 0,1,26,6,1024,243,64,64,2 endef endif if mac and dbl disks numdisks ; g5ve bank 1 out ilow+10h ;88 for drive bank 10 mov a,b out ihigh+10h wait0: call instat ;wait for completion ani iordy ;ready? jz wait0 ; check io completion ok call intype ;must be io complete (00) unlinked ; 00 unlinked i/o complete, 01 linked i/o complete (not used) ; 10 disk status changed 11 (not used) cpi 10b ;ready status change? jz wready ; must be 00 in the accumulator ora a jnz werror ;some other condition, retry ; check i/o error bits call inbyte 5enerate drive tables diskdef 0,1,52,,2048,243,128,128,2,0 endef endif if asm dpbase equ $ ;base of disk param blks dpe0: dw xlt0,0000h ;translate table dw 0000h,0000h ;scratch area dw dirbuf,dpb0 ;dir buff, parm block dw csv0,alv0 ;check, alloc vectors dpb0 equ $ ;disk param block endif if asm and sgl dw 26 ;sec per track db 3 ;block shift db 7 ;block mask db 0 ;extnt mask dw 242 ;disk size-1 dw 63 ;directory max db 192 ;alloc0 db 0 ;alloc1 dw 16 ;check 5rral jc wready ;unit not ready rar ani 11111110b ;any other errors? (deleted data ok) jnz werror ; read or write is ok, accumulator contains zero ret wready: ;not ready, treat as error for now call inbyte ;clear result byte jmp trycount werror: ;return hardware malfunction (crc, track, seek, etc.) ; the MDS controller has returned a bit in each position ; of the accumulator, corresponding to the conditions: ; 0 - deleted data (accepted as ok above) ; 1 - crc error ; 2 - seek er5size dw 2 ;offset xlt0 equ $ ;translate table db 1 db 7 db 13 db 19 db 25 db 5 db 11 db 17 db 23 db 3 db 9 db 15 db 21 db 2 db 8 db 14 db 20 db 26 db 6 db 12 db 18 db 24 db 4 db 10 db 16 db 22 endif if asm and dbl xlt0 equ 0 endif if asm begdat equ $ dirbuf: ds 128 ;directory access buffer alv0: ds 31 csv0: ds 16 endif if asm and dbl ds 16 endif if asm enddat equ $ datsiz equ $-begdat endif end 5ror ; 3 - address error (hardware malfunction) ; 4 - data over/under flow (hardware malfunction) ; 5 - write protect (treated as not ready) ; 6 - write error (hardware malfunction) ; 7 - not ready ; (accumulator bits are numbered 7 6 5 4 3 2 1 0) trycount: ; register c contains retry count, decrement 'til zero dcr c jnz rewait ;for another try ; cannot recover from error mvi a,1 ;error code ret ; intype, inbyte, instat read drive bank 00 or 10 intype: lda dbank ora a jnz intyp1 5 0; MDS-800 Cold Start Loader for MP/M 2.0 ; ; VERSION 2.0 09/1481 ; mpmldrb equ 0100h ;base of MP/M loader ; org 3000h ;loaded here by hardware ; ntrks equ 2 ;tracks to read mpmldr0 equ 25 ;# on track 0 mpmldr1 equ 26 ;# on track 1 ; rmon80 equ 0ff0fh ;restart location for mon80 base equ 078h ;'base' used by controller rtype equ base+1 ;result type rbyte equ base+3 ;result byte reset equ base+7 ;reset controller ; dstat equ base ;disk status port ilow equ base+1 ;low iopb address i5{;skip to bank 10 in rtype ret intyp1: in rtype+10h ;78 for 0,1 88 for 2,3 ret inbyte: lda dbank ora a jnz inbyt1 in rbyte ret inbyt1: in rbyte+10h ret instat: lda dbank ora a jnz insta1 in dstat ret insta1: in dstat+10h ret ; utility subroutines prmsg: ;print message at h,l to 0 mov a,m ! ora a ! rz push h ! mov c,a ! call conout ! pop h inx h ! jmp prmsg ; data areas (must be in ram) dbank: db 0 ;disk bank 00 if drive 0,1 ; 10 if drive 2,3 55high equ base+2 ;high iopb address bsw equ 0ffh ;boot switch readf equ 4h ;disk read function stack equ 100h ;use end of boot for stack ; rstart: lxi sp,stack;in case of call to mon80 ; clear disk status in rtype in rbyte ; check if boot switch is off coldstart: in bsw ani 02h ;switch on? jnz coldstart ; clear the controller out reset ;logic cleared ; ; mvi b,ntrks ;number of tracks to read lxi h,iopb0 ; start: ; ; read first/next track into cpmb mov a,l out ilow mov a55z,h out ihigh wait0: in dstat ani 4 jz wait0 ; ; check disk status in rtype ani 11b cpi 2 ; jnc rstart ;retry the load ; in rbyte ;i/o complete, check status ; if not ready, then go to mon80 ral cc rmon80 ;not ready bit set rar ;restore ani 11110b ;overrun/addr err/seek/crc/xxxx ; jnz rstart ;retry the load ; ; lxi d,iopbl ;length of iopb dad d ;addressing next iopb dcr b ;count down tracks jnz start ; ; ; jmp to the MP/M loader jmp mpmldrb ; ; parameter blo55lwcks iopb0: db 80h ;iocw, no update db readf ;read function db mpmldr0 ;# sectors to read trk 0 db 0 ;track 0 db 2 ;start with sector 2, trk 0 dw mpmldrb ;start at base of bdos iopbl equ $-iopb0 ; iopb1: db 80h db readf db mpmldr1 ;sectorks to read on track 1 db 1 ;track 1 db 1 ;sector 1 dw mpmldrb+mpmldr0*128 ;base of second read end  @5?;*** ;* B * ;* Sector Deblocking Algorithms for MP/M II V2.0 * ;*  * ;*** ; ; utility macro to compute sector mask smask macro hblk ;; compute log2(hblk), return @x as result ;; (2 ** @x = hblk on return) @y set hblk @x set 0 ;; count right shifts of @y until = 1 rept 8 if @55 Esy = 1 exitm endif ;; @y is not 1, shift right one position @y set @y shr 1 @x set @x + 1 endm endm ; ;*** ;*  * ;*  MP/M to host disk constants  * ;*  * ;**y* blksiz equ 2048 ;MP/M allocation size hstsiz equ 512 ;host disk sector size hstspt equ 20 ;host disk sectors/trk 5 66}I hstblk equ hstsiz/128 ;MP/M sects/host buff cpmspt equ hstblk * hstspt ;MP/M sectors/track secmsk equ hstblk-1 ;sector mask smask hstblk ;compute sector mask secshf equ @x ;log2(hstblk) ; ;*** ;*  * ;* BDOS constants on entry to write  * ;*  * ;**%* wrall equ 0 ;write to allocated 6 k* ;* The WRITE entry point takes the place of * ;* the previous BIOS defintion for WRITE. * ;*  * ;*** write: ;write the selected MP/M sector xra a ;0 to accumulator sta readop ;not a read operation mov a,c ;write type in c sta wrtype ani wrual ;write unallocated? jz chkuna ;check for unalloc ; ; write to unallocated, set parameters# mvi a,blksiz/128 ;next unalloc r6OJwrdir equ 1 ;write to directory wrual equ 2 ;write to unallocated ; ;*** ;* q * ;* The BDOS entry points given below show the * ;* code which is relevant to deblocking only. * ;*  * ;**o* ; ; DISKDEF macro, or hand coded tables go here dpbase equ $ ;disk param block base ; boot: wboot: ;6ecs sta unacnt lda sekdsk ;disk to seek sta unadsk ;unadsk = sekdsk lhld sektrk shld unatrk ;unatrk = sectrk lda seksec sta unasec ;unasec = seksec ; chkuna: ;check for write to unallocated sector lda unacnt ;any unalloc remain? ora a jz alloc ;skip if not ; ; more unallocated records remain dcr a ;unacnt = unacnt-1 sta unacnt lda sekdsk ;same disk? lxi h,unadsk cmp m ;sekdsk = unadsk? jnz alloc ;skip if not ; ; disks are the same lxi h,unatrk call sektr6enter here on system boot to initialize xra a ;0 to accumulator sta hstact ;host buffer inactive sta unacnt ;clear unalloc count ret ; home: ;home the selected disk lda hstwrt ;check for pending write ora a jnz homed sta hstact ;clear host active flag homed: ret ; seldsk: ;select disk mov a,c ;selected disk number sta sekdsk ;seek disk number mov l,a ;disk number to HL mvi h,0 rept 4 ;multiply by 16 dad h endm lxi d,dpbase ;base of parm block dad d ;hl=6kcmp ;sektrk = unatrk? jnz alloc ;skip if not ; ; tracks are the same lda seksec ;same sector? lxi h,unasec cmp m ;seksec = unasec? jnz alloc ;skip if not ; ; match, move to next sector for future ref inr m ;unasec = unasec+1 mov a,m ;end of track? cpi cpmspt ;count MP/M sectors jc noovf ;skip if no overflow ; ; overflow to next track mvi m,0 ;unasec = 0 lhld unatrk inx h shld unatrk ;unatrk = unatrk+1 ; noovf: ;match found, mark as unnecessary read xra a ;0 6w.dpb(curdsk) ret ; settrk: ;set track given by registers BC mov h,b mov l,c shld sektrk ;track to seek ret ; setsec: ;set sector given by register c mov a,c sta seksec ;sector to seek ret ; setdma: ;set dma address given by uBC mov h,b mov l,c shld dmaadr ret ; sectran: ;translate sector number BC mov h,b mov l,c ret ; ;*** ;* ! * ;* The READ entry point takes6 Oto accumulator sta rsflag ;rsflag = 0 jmp rwoper ;to perform the write ; alloc: ;not an unallocated record, requires pre-read xra a ;0 to accum sta unacnt ;unacnt = 0 inr a ;1 to accum sta rsflag ;rsflag = 1 ; ;*** ;* 9 * ;* Common code for READ and WRITE follows * ;*  * ;*** rwo6U> the place of * ;* the previous BIOS defintion for READ. * ;*  * ;*** read: ;read the selected MP/M sector xra a sta unacnt ;unacnt = 0 inr a sta readop ;read operation sta rsflag ;must read data mvi a,wrual sta wrtype ;treat as unalloc jmp rwoper ;to perform the read ; ;*** ;*  6 6per: ;enter here to perform the read/write xra a ;zero to accum sta erflag ;no errors (yet) lda seksec ;compute host sector rept secshf ora a ;carry = 0 rar ;shift right endm sta sekhst ;host sector to seek ; ; active host sector? lxi h,hstact ;host active flag mov a,m mvi m,1 ;always becomes 1 ora a ;was it already? jz filhst ;fill host if not ; ; host buffer active, same as seek buffer? lda sekdsk lxi h,hstdsk ;same disk? cmp m ;sekdsk = hstdsk? jnz nomat6QOQytes equal, test high 1s inx d inx h ldax d cmp m ;sets flags ret ; ;*** ;* * ;* WRITEHST performs the physical write to * ;* the host disk, READHST reads the physical * ;* disk. * ;*  * ;**X* writehst: ;hstdsk = host disk #, hsttrk = host track #, ;hstsec = host sect #. wr6uch ; ; same disk, same track? lxi h,hsttrk call sektrkcmp ;sektrk = hsttrk? jnz nomatch ; ; same disk, same track, same buffer? lda sekhst lxi h,hstsec ;sekhst = hstsec? cmp m jz match ;skip if match ; nomatch: ;proper disk, but not correct sector lda hstwrt ;host written? ora a cnz writehst ;clear host buff ; filhst: ;may have to fill the host buffer lda sekdsk sta hstdsk lhld sektrk shld hsttrk lda sekhst sta hstsec lda rsflag ;need to read? ora a cnz r6cite "hstsiz" bytes ;from hstbuf and return error flag in erflag. ;return erflag non-zero if error ret ; readhst: ;hstdsk = host disk #, hsttrk = host track #, ;hstsec = host sect #. read "hstsiz" bytes ;into hstbuf and return error flag in erflag. ret ; ;*** ;* - * ;* Unitialized RAM data areas * ;*  * ;**6eadhst ;yes, if 1 xra a ;0 to accum sta hstwrt ;no pending write ; match: ;copy data to or from buffer lda seksec ;mask buffer number ani secmsk ;least signif bits mov l,a ;ready to shift mvi h,0 ;double count rept 7 ;shift left 7 dad h endm ; hl has relative host buffer address lxi d,hstbuf dad d ;hl = host address xchg ;now in DE lhld dmaadr ;get/put MP/M data mvi c,128 ;length of move lda readop ;which way? ora a jnz rwmove ;skip if read ; ; write o6y *** ; sekdsk: ds 1 ;seek disk number sektrk: ds 2 ;seek track number seksec: ds 1 ;seek sector number ; hstdsk: ds 1 ;host disk number hsttrk: ds 2 ;host track number hstsec: ds 1 ;host sector number ; sekhst: ds 1 ;seek shr secshf hstact: ds 1 ;host active flag hstwrt: ds 1 ;host written flag ; unacnt: ds 1 ;unalloc rec cnt unadsk: ds 1 ;last unalloc disk unatrk: ds 2 ;last unalloc track unasec: ds 1 ;last unalloc sector ; erflag: ds 1 ;error reporting rs6peration, mark and switch direction mvi a,1 sta hstwrt ;hstwrt = 1 xchg ;source/dest swap ; rwmove: ;C initially 128, DE is source, HL is dest ldax d ;source character inx d mov m,a ;to dest inx h dcr c ;loop 128 times jnz rwmove ; ; data has been moved to/from host buffer lda wrtype ;write type ani wrdir ;to directory? lda erflag ;in case of errors rz ;no further processing ; ; clear host buffer for directory write ora a ;errors? rnz ;skip if so xra a 6  flag: ds 1 ;read sector flag readop: ds 1 ;1 if read operation wrtype: ds 1 ;write operation type dmaadr: ds 2 ;last dma address hstbuf: ds hstsiz ;host buffer ; ;*** ;* 6 * ;* The ENDEF macro invocation goes here * ;*  * ;** * end 6qMR;0 to accum sta hstwrt ;buffer written call writehst lda erflag ret ; ;*** ;* , * ;* Utility subroutine for 16-bit compare * ;*  * ;*** sektrkcmp: ;HL = .unatrk or .hsttrk, compare with sektrk xchg lxi h,sektrk ldax d ;low byte compare cmp m ;same? rnz ;return if not ; low b 7716 ;;A THROUGH F? RNC ;;RETURN WITH ASSUMED CR @IN1: ;;IN RANGE, MULTIPLY BY 4 AND ADD REPT 4 DAD H ;;SHIFT 4 ENDM ORA L ;;ADD DIGIT MOV L,A ;;AND REPLACE VALUE JMP @IN0 ;;FOR ANOTHER DIGIT ;; PSUB: UGEN MACRO ;; REDEF TO INCLUDE ONCE . ENDM UGEN ;;GENERATE FIRST TIME ENDM ; **K* ; * END OF TRACE/DUMP UTILITIES * ; * BEGIN TRACE(ONLY) UTILITIES * ; **8* TRACE MACRO CODE,MNAME ;; TRACE MACRO GIVEN BY MNAME7 byte, ; date address, ; hrs byte, ; min byte, ; sec byte, ; ASCII (21) byte ); ; declare string$adr address; string$adr: ds 2 ; declare string based string$adr (1) byte; ; declare index byte; index: ds 1 ; declare chr byte; chr: ds 1 ; declare ; base$year lit '78', /* base year for computations */ ; base$day lit '0', /* starting day for base$year 0..6 */ ; month$size (*) byte data ; /* jan feb mar apr may jun jul aug sep oct nov dec */ ;70, ;; AT LOCATION GIVEN BY CODE LOCAL PSUB UGEN ;;GENERATE UTILITIES JMP PSUB @T1: DS 2 ;;TEMP FOR REG-1 @T2: DS 2 ;;TEMP FOR REG-2 ;; @TR: ;;TRACE MACRO CALL ;; BC=CODE ADDRESS, DE=MESSAGE SHLD @T1 ;;STORE TOP REG POP H ;;RETURN ADDRESS XTHL ;;REG-2 TO TOP SHLD @T2 ;;STORE TO TEMP PUSH PSW ;;SAVE FLAGS PUSH B ;;SAVE RET ADDRESS MVI C,WBUFF ;;PRINT BUFFER FUNC CALL BDOS ;;PRINT MACRO NAME POP H ;;CODE ADDRESS CALL @AD ;;PRINTED LHLD @T1 ;;TOP OF STACK CALL @AD ;;PRINTED 7  ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31), cseg month$size: db 31,28,31,30,31,30,31,31,30,31,30,31 ; month$days (*) word data ; /* jan feb mar apr may jun jul aug sep oct nov dec */ ; ( 000,031,059,090,120,151,181,212,243,273,304,334); month$days: dw 000,031,059,090,120,151,181,212,243,273,304,334 dseg ; declare word$value word; word$value: ds 2 ; declare (month, day, year, hrs, min, sec) byte; month: ds 1 day: ds 1 year: ds 1 hrs: ds 1 min: 7W LHLD @T2 ;;TOP-1 CALL @AD ;;PRINTED POP PSW ;;FLAGS RESTORED POP D ;;RETURN ADDRESS LHLD @T2 ;;TOP-1 PUSH H ;;RESTORED PUSH D ;;RETURN ADDRESS LHLD @T1 ;;TOP OF STACK RET ;; PSUB: ;;PAST SUBROUTINES ;; TRACE MACRO C,M ;; REDEFINED TRACE, USES @TR LOCAL PMSG,MSG JMP PMSG MSG: DB CR,LF ;;CR,LF DB '&M$' ;;MAC NAME PMSG: LXI B,C ;;CODE ADDRESS LXI D,MSG ;;MACRO NAME CALL @TR ;;TO TRACE IT ENDM ;; BACK TO ORIGINAL MACRO LEVEL TRACE CODE,MNAME ENDM ; TRT MACRO F ;; T7 ds 1 sec: ds 1 ; declare ; week$day byte, /* day of week 0 ... 6 */ weekday: ds 1 ; day$list (*) byte data ; ('Sun$Mon$Tue$Wed$Thu$Fri$Sat$'), cseg day$list: db 'Sun$Mon$Tue$Wed$Thu$Fri$Sat$' dseg ; leap$bias byte; /* bias for feb 29 */ leapbias: ds 1 cseg ; error$exit: procedure; ERROREXIT: ; declare rtn byte; ; /* pop off two returns */ ; stack$ptr = stack$ptr + 6; ; /* set A reg = 0 */ LXI D,6H LXI H,0 ; 0 DAD SP DAD D 7hURN ON FLAG "F" DEBUG&F SET 1 ;;PRINT/TRACE ON ENDM ; TRF MACRO F ;; TURN OFF FLAG "F" DEBUG&F SET 0 ;;TRACE/PRINT OFF ENDM ; ?TR MACRO M ;; CHECK DEBUGT TOGGLE BEFORE TRACE IF DEBUGT TRACE %$,M ENDM ; **I* ; * END TRACE (ONLY) UTILITIES * ; * BEGIN DUMP(ONLY) UTILITIES * ; *** DMP MACRO VNAME,N ;; DUMP VARIABLE VNAME FOR ;; N ELEMENTS (DOUBLE BYTES) LOCAL PSUB ;;PAST SUBROUTINES UGEN ;;GEN INLINE ROUTIN7  SPHL ; rtn = false; xra a ; end error$exit; RET ; emitchar: procedure(c$1); EMITCHAR: ; declare c$1 byte; ; string(index := index + 1) = c$1; lxi h,index inr m mov e,m mvi d,0 LHLD STRINGADR dad d mov m,c ; end emitchar; RET ; emitn: procedure(a$1); EMITN: ; declare a$1 address; ; declare c based a$1 byte; ; do while c <> '$'; @25: ;BC = .source ldax b CPI 24H rz ; string(index := index + 1) = c; lxi h,index 7[i title 'MP/M-80 V2.0 Time of Day Conversion Procedure' name 'todcnv' cseg ; todcnv: ; do; ; /*** ; 'Time & Date ASCII Conversion Code ; ***/ dseg ; declare lit literally 'literally', ; forever lit 'while 1', ; word lit 'address', ; true lit '0ffh', ; false lit '0'; ; declare tod$adr address; tod$adr: ds 2 ; declare tod based tod$adr structure ( ; opcode 77inr m mov e,m mvi d,0 lhld stringadr dad d mov m,a inx h ; a$1 = a$1 + 1; inx b ; end; JMP @25 ; end emitn; ; RET ; emit$bcd$pair: procedure(b$1); EMITBCDPAIR: ; declare b$1 byte; ; call emit$char('0'+shr(b$1,4)); push b mov a,c ani 0f0h RAR RAR RAR RAR ADI '0' MOV C,A CALL EMITCHAR ; call emit$char('0'+(b$1 and 0fh)); pop b mov a,c ANI 0FH ADI '0' MOV C,A jmp EMITCHAR ; end emit$bcd$pair; ; RET ; emit$col7); rb$5 = shl(b$5,3) + shl(b$5,1); /* b$5 = b$5 * 10 */ LDA B5 ADD A mov c,a ADD A ADD A ADD C STA B5 ; >if carry then call error$exit; SBB A RAR cc ERROREXIT ; Lb$5 = b$5 + (chr - '0'); LDA CHR SUI 30H LXI H,B5 ADD M MOV M,A ; >if carry then call error$exit; SBB A RAR cc ERROREXIT ; call gnc; CALL GNC ; rend; JMP @29 @30: ; if (b$5 < lb$1) or (b$5 > ub$1) then call error$exit; LXI H,LB1 LDA B5 SUB M 7 on: procedure(b$2); EMITCOLON: ; declare b$2 byte; ; call emit$bcd$pair(b$2); CALL EMITBCDPAIR ; call emitchar(':'); MVI C,3AH jmp EMITCHAR ; end emit$colon; ; RET ; emit$bin$pair: procedure(b$3); EMITBINPAIR: ; declare b$3 byte; ; call emit$char('0'+b$3/10); mov e,c mvi d,0 LXI H,0AH CALL @P0029 push h mvi a,'0' add e mov c,a CALL EMITCHAR ; call emit$char('0'+b$3 mod 10); pop b mov a,c adi '0' mov c,a jmp EMITCHAR ; e7SBB A INX H PUSH PSW ; 1 MOV A,M LXI H,B5 SUB M SBB A POP B ; 1 MOV C,B ORA C RAR cc ERROREXIT ; return b$5; LDA B5 RET ; end scan$numeric; ; scan$delimiter: procedure(d$1,lb$2,ub$2) byte; SCANDELIMITER: LXI H,UB2 MOV M,E DCX H MOV M,C DCX H POP D POP B MOV M,C PUSH D ; declare (d$1,lb$2,ub$2) byte; dseg d$1: ds 1 lb2: ds 1 ub2: ds 1 cseg ; call deblank; CALL DEBLANK ; if chr <> d$1 then call error$exit; LXI H,D17snd emit$bin$pair; ; RET ; emit$slant: procedure(b$4); EMITSLANT: ; declare b$4 byte; ; call emit$bin$pair(b$4); CALL EMITBINPAIR ; call emitchar('/'); MVI C,2FH jmp EMITCHAR ; end emit$slant; ; RET ; gnc: procedure; GNC: ; /* get next command byte */ ; if chr = 0 then return; LDA CHR ora a rz ; if index = 20 then LDA INDEX sui 14H jz @2 ; do; ; chr = 0; ; return; ; end; ; chr = string(index := index + 17 LDA CHR CMP M JZ @8 CALL ERROREXIT @8: ; call gnc; CALL GNC ; return scan$numeric(lb$2,ub$2); LHLD LB2 MOV C,L LHLD UB2 XCHG jmp SCANNUMERIC ; RET ; end scan$delimiter; ; leap$days: procedure(y,m$1) byte; LEAPDAYS: LXI H,M1 MOV M,E DCX H MOV M,C ; declare (y,m$1) byte; dseg y: ds 1 m1: ds 1 cseg ; /* compute days accumulated by leap years */ ; declare yp byte; dseg yp: ds 1 cseg ; yp = shr(y,2); /* yp = y/4 */ L7k); lxi h,index inr m mov e,m mvi d,0 LHLD STRINGADR DAD d MOV A,M @2: STA CHR ; end gnc; RET ; deblank: procedure; DEBLANK: ; 6do while chr = ' '; @27: LDA CHR CPI 20H rnz ; call gnc; CALL GNC ; end; JMP @27 ; end deblank; ; RET ; numeric: procedure byte; NUMERIC: ; /* test for numeric */ ; return (chr - '0') < 10; LDA CHR SUI 30H SUI 0AH SBB A RET ; end numeric; ; scan$numeric: procedure(lb$1,u7 DA Y ANI 254 RAR RAR STA YP ; if (y and 11b) = 0 and month$days(m$1) < 59 then LDA Y ANI 3H SUI 0H SUI 1 SBB A LHLD M1 MVI H,0 LXI B,MONTHDAYS DAD H DAD B XCHG PUSH PSW ; 1 MVI A,3BH CALL @P0101 SBB A POP B ; %1 MOV C,B ANA C RAR JNC @9 ; 0 then call error$exit; LDA B5 ANI 0E0H CPI 0H cnz ERROREXIT 88rRET ; end leap$days; ; bcd: BCD: LXI H,VAL MOV M,C ; procedure (val) byte; ; declare val byte; dseg val: ds 1 cseg ; return shl((val/10),4) + val mod 10; LHLD VAL MVI H,0 XCHG LXI H,0AH CALL @P0029 XCHG DAD H DAD H DAD H DAD H PUSH H ; 1 LHLD VAL MVI H,0 XCHG CALL @P0030 POP B ; 1 DAD B MOV A,L RET ; end bcd; ; set$date$time: procedure; SETDATETIME: ; declare ; (i, leap$flag) byte; /* temporaries */ dseg 8 C,A CALL BCD LXI B,4H LHLD TODADR DAD B MOV M,A ; if tod.opcode = 2 then LHLD TODADR MOV A,M CPI 2H JNZ @13 ; /* date, hours and minutes only */ ; do; ; -if chr = ':' LDA CHR CPI 3AH JNZ @14 ; ythen i = scan$delimiter (':',0,59); MVI C,3AH PUSH B ; 1 MVI E,3BH MVI C,0H CALL SCANDELIMITER STA I @14: ; tod.sec = 0; LXI B,5H LHLD TODADR DAD B MVI M,0H ; end; ret @13: ; /* include seconds */ ; else tod.s8i: ds 1 leap$flag: ds 1 cseg ; month = scan$numeric(1,12) - 1; ; /* may be feb 29 */ MVI E,0CH MVI C,1H CALL SCANNUMERIC DCR A STA MONTH ; if (leap$flag := month = 1) then i = 29; LDA MONTH SUI 1H SUI 1 SBB A STA LEAPFLAG RAR JNC @10 LXI H,I MVI M,1DH JMP @11 @10: ; else i = month$size(month); LHLD MONTH MVI H,0 LXI B,MONTHSIZE DAD B MOV A,M STA I @11: ; day = scan$delimiter('/',1,i); MVI C,2FH PUSH B ; 1 LHLD I X8ec = bcd (scan$delimiter(':',0,59)); MVI C,3AH PUSH B ; 1 MVI E,3BH MVI C,0H CALL SCANDELIMITER MOV C,A CALL BCD LXI B,5H LHLD TODADR DAD B MOV M,A ; end set$date$time; RET ; compute$year: procedure; COMPUTEYEAR: ; /* compute year from number of days in word$value */ ; declare year$length word; dseg year$length: ds 2 cseg ; year = base$year; LXI H,YEAR MVI M,4EH ; do forever; @31: ; 'year$length = 365; LXI H,16DH SHLD 8 CHG MVI C,1H CALL SCANDELIMITER STA DAY ; year = scan$delimiter('/',base$year,99); ; /* ensure that feb 29 is in a leap year */ MVI C,2FH PUSH B ; 1 MVI E,63H MVI C,4EH CALL SCANDELIMITER STA YEAR ; if leap$flag and day = 29 and (year and 11b) <> 0 then LDA DAY SUI 1DH SUI 1 SBB A LXI H,LEAPFLAG ANA M PUSH PSW ; 1 LDA YEAR ANI 3H SUI 0H ADI 255 SBB A POP B ; 1 MOV C,B ANA C RAR JNC @12 ; /* feb 29 of non-leap year */ call error8 YEARLENGTH ; Kif (year and 11b) = 0 then /* leap year */ LDA YEAR ANI 3H JNZ @16 ; :year$length = 366; LXI H,16EH SHLD YEARLENGTH @16: ; ]if word$value <= year$length then LXI D,YEARLENGTH LXI B,WORDVALUE CALL @P0098 rnc ; return; ; word$value = word$value - year$length; LXI B,YEARLENGTH LXI D,WORDVALUE CALL @P0098 XCHG DCX H MOV M,E INX H MOV M,D ; (year = year + 1; LXI H,YEAR INR M ; end; JMP8g$exit; CALL ERROREXIT @12: ; /* compute total days */ ; tod.date = month$days(month) ; + 365 * (year - base$year) ; + day ; - leap$days(base$year,0) ; + leap$days(year,month); LHLD MONTH MVI H,0 LXI B,MONTHDAYS DAD H DAD B LDA YEAR SUI 4EH MOV E,A MVI D,0 PUSH H ; 1 LXI H,16DH CALL @P0034 POP D ; 1 CALL @P0017 PUSH H ; 1 LHLD DAY MVI H,0 POP B ; 1 DAD B PUSH H ; 1 MVI E,0H MVI 8 , @31 ; end compute$year; ; RET ; compute$month: procedure; COMPUTEMONTH: ; month = 12; LXI H,MONTH MVI M,0CH ; Ado while month > 0; @33: LXI H,MONTH mov a,m ora a rz ; Yif (month := month - 1) < 2 then /* jan or feb */ DCR A mov m,a CPI 2H JNC @18 ; 2leapbias = 0; LXI H,LEAPBIAS MVI M,0H @18: ; if month$days(month) + leap$bias < word$value then return; LHLD MONTH MVI H,0 LXI B,MONTHDAYS DAD H DAD B LDA LEAPBIAS 8 C,4EH CALL LEAPDAYS POP D ; 1 CALL @P0096 PUSH H ; 1 LHLD YEAR MOV C,L LHLD MONTH XCHG CALL LEAPDAYS MOV E,A MVI D,0 POP H ; 1 DAD D PUSH H ; 1 LHLD TODADR INX H POP B ; 1 MOV M,C INX H MOV M,B ; tod.hrs = bcd (scan$numeric(0,23)); MVI E,17H MVI C,0H CALL SCANNUMERIC MOV C,A CALL BCD LXI B,3H LHLD TODADR DAD B MOV M,A ; tod.min = bcd (scan$delimiter(':',0,59)); MVI C,3AH PUSH B ; 1 MVI E,3BH MVI C,0H CALL SCANDELIMITER MOV 8u87 CALL @P0015 XCHG LXI H,WORDVALUE CALL @P0104 rc ; end; JMP @33 ; end compute$month; ; RET ; get$date$time: procedure; GETDATETIME: ; /* get date and time */ ; hrs = tod.hrs; LXI B,3H LHLD TODADR DAD B MOV A,M STA HRS ; min = tod.min; LHLD TODADR INX B DAD B MOV A,M STA MIN ; sec = tod.sec; LHLD TODADR INX B DAD B MOV A,M STA SEC ; word$value = tod.date; ; /* word$value contains total number of days */ LHLD 8 ora a JNZ @21 ; do; ; )call get$date$time; CALL GETDATETIME ; )index = -1; LXI H,INDEX MVI M,0FFH ; acall emit$date$time; CALL EMITDATETIME ; end; JMP @22 @21: ; else ; do; ; if (tod.opcode = 1) or LHLD TODADR MOV A,M SUI 1H SUI 1 SBB A PUSH PSW ; 1 MOV A,M SUI 2H SUI 1 SBB A POP B ; 1 MOV C,B ORA C RAR JNC @23 ;  (tod.opcode = 2) then ; do; ; (chr = string(index:=0); LXI H,INDEX 8(TODADR INX H MOV E,M INX H MOV D,M XCHG SHLD WORDVALUE ; week$day = (word$value + base$day - 1) mod 7; DCX H XCHG LXI H,7H CALL @P0029 XCHG LXI H,WEEKDAY MOV M,E ; call compute$year; ; /* year has been set, word$value is remainder */ CALL COMPUTEYEAR ; leap$bias = 0; LXI H,LEAPBIAS MVI M,0H ; if (year and 11b) = 0 and word$value > 59 then LDA YEAR ANI 3H SUI 0H SUI 1 SBB A PUSH PSW ; 1 MVI A,3BH LXI H,WORDVALUE CALL @P0103 SBB8?0MVI M,0H LHLD STRINGADR MOV A,M STA CHR ; )call set$date$time; CALL SETDATETIME ; end; JMP @24 @23: ; else ; do; ; return false; xra a RET ; end; @24: ; end; @22: ; return true; MVI A,0FFH RET ; end tod$ASCII; ; end todcnv; @P0015: mov e,a mvi d,0 xchg @P0017: LDAX D ADD L MOV L,A INX D LDAX D ADC H MOV H,A RET @P0029: MOV B,H MOV C,L @P02030: LXI H,0 MVI A,16 PUSH PSW DAD H XCH8 A POP B ; 1 MOV C,B ANA C RAR JNC @20 ; /* after feb 29 on leap year */ leap$bias = 1; LXI H,LEAPBIAS MVI M,1H @20: ; call compute$month; CALL COMPUTEMONTH ; day = word$value - (month$days(month) + leap$bias); LHLD MONTH MVI H,0 LXI B,MONTHDAYS DAD H DAD B LDA LEAPBIAS CALL @P0015 LXI D,WORDVALUE CALL @P0102 XCHG LXI H,DAY MOV M,E ; month = month + 1; DCX H INR M ; end get$date$time; RET ; emit$date$time: procedure; EMITD8G SUB A DAD H XCHG ADC L SUB C MOV L,A MOV A,H SBB B MOV H,A INX D JNC $+5H DAD B DCX D POP PSW DCR A JNZ $-14H RET @P0034: MOV B,H MOV C,L LXI H,0 MVI A,16 DAD H XCHG DAD H XCHG JNC $+4H DAD B DCR A JNZ $-9H RET @P0096: MOV C,A MVI B,0 MOV A,E SUB C MOV L,A MOV A,D SBB B MOV H,A RET @P0098: MOV L,C MOV H,B MOV C,M INX H MOV B,M LDAX D SUB C MOV L,A INX D LDAX D SBB B MOV H,A RET @P0101: MOV8ATETIME: ; call emitn(.day$list(shl(week$day,2))); LDA WEEKDAY ADD A ADD A MOV C,A MVI B,0 LXI H,DAYLIST DAD B MOV B,H MOV C,L CALL EMITN ; call emitchar(' '); MVI C,20H CALL EMITCHAR ; call emit$slant(month); LHLD MONTH MOV C,L CALL EMITSLANT ; call emit$slant(day); LHLD DAY MOV C,L CALL EMITSLANT ; call emit$bin$pair(year); LHLD YEAR MOV C,L CALL EMITBINPAIR ; call emitchar(' '); MVI C,20H CALL EMITCHAR ; call emit$col8  L,A MVI H,0 @P0102: LDAX D SUB L MOV L,A INX D LDAX D SBB H MOV H,A RET @P0103: MOV E,A MVI D,0 @P0104: MOV A,E SUB M MOV E,A MOV A,D INX H SBB M MOV D,A XCHG RET END 8!on(hrs); LHLD HRS MOV C,L CALL EMITCOLON ; call emit$colon(min); LHLD MIN MOV C,L CALL EMITCOLON ; call emit$bcd$pair(sec); LHLD SEC MOV C,L jmp EMITBCDPAIR ; end emit$date$time; ; RET ; tod$cnv: TODCNV: public todcnv mov h,b mov l,c ; procedure (parameter) byte; ; declare parameter address; ; tod$adr = parameter; SHLD TODADR ; string$adr = .tod.ASCII; xchg LXI h,6H DAD d SHLD STRINGADR ; if tod.opcode = 0 then ldax d 9k9 title 'MP/M II V2.0 DSC-2 Basic & Extended I/O Systems' cseg maclib diskdef ; ; bios for micro-2 computer ; ; false equ 0 true equ not false ; debug equ true ldcmd equ true ; MHz4 equ true if MHz4 dlycnst equ 086h else dlycnst equ 054h endif ; ; org 0000h ; ; jump vector for individual subroutines ; jmp coldstart ;cold start jmp commonbase wboot: jmp warmstart ;warm start jmp const ;console status jmp conin ;console character in jmp conout ;console character o9output ; ptbljmp: ; compute and jump to handler ; d = console # ; do not destroy d ! mov a,d cpi nmbcns jc tbljmp pop psw ; throw away table address rtnempty: xra a ret tbljmp: ; compute and jump to handler ; a = table index add a ; double table index for adr offst pop h ; return adr points to jump tbl mov e,a mvi d,0 dad d ; add table index * 2 to tbl base mov e,m ; get handler address inx h mov d,m xchg pchl ; jump to computed cns handler ; ; ASCII9Sut jmp list ;list character out jmp rtnempty ;punch not implemented jmp rtnempty ;reader not implemented jmp home ;move head to home jmp seldsk ;select disk jmp settrk ;set track number jmp setsec ;set sector number jmp setdma ;set dma address jmp read ;read disk jmp write ;write disk jmp pollpt ;list status jmp sectran ;sector translate jmp selmemory ; select memory jmp polldevice ; poll device jmp startclock ; start clock jmp stopclock ; stop clock jmp exitreg9 Character Equates ; uline equ 5fh rubout equ 7fh space equ 20h backsp equ 8h altrub equ uline ; ; Input / Output Port Address Equates ; data0 equ 40h sts0 equ data0+1 cd0 equ sts0 data1 equ 48h sts1 equ data1+1 cd1 equ sts1 data2 equ 50h sts2 equ data2+1 cd2 equ sts2 data3 equ 58h sts3 equ data3+1 cd3 equ sts3 ; ; Poll Console #0 Input ; if debug polci0: pt0st: if ldcmd lda pt0cntr ora a mvi a,0 rnz endif in sts0 ani 2 rz mvi a,0ffh ret ; pt0in: if ld9ion ; exit region jmp maxconsole ; maximum console number jmp systeminit ; system initialization db 0 ; force use of internal dispatch @ idle ; jmp idle ; idle procedure ; commonbase: jmp coldstart swtuser: jmp $-$ swtsys: jmp $-$ pdisp: jmp $-$ xdos: jmp $-$ sysdat: dw $-$ coldstart: warmstart: mvi c,0 jmp xdos ; system reset, terminate process ; ; ;I/O handlers ; ; ; MP/M II V2.0 Console Bios ; ; nmbcns equ 3 ; number of consoles poll equ 131 ; XDOS poll fun96cmd lxi h,pt0cntr mov a,m ora a jz ldcmd0empty dcr m lhld pt0ptr mov a,m inx h shld pt0ptr ret pt0cntr: db ldcmd0empty-pt0ldcmd pt0ptr: dw pt0ldcmd pt0ldcmd: db 'tod ' ldcmd0empty: endif mvi c,poll mvi e,plci0 call xdos in data0 ani 7fh ret ; else pt0st: ; return 0ffh if ready, ; 000h if not lda c0inmsgcnt ora a rz mvi a,0ffh ret ; ; Console #0 Input ; c0inpd: dw c2inpd ; pl db 0 ; status db 32 ; priority dw c0instk+18 ; 9ction makeque equ 134 ; XDOS make queue function readque equ 137 ; XDOS read queue function writeque equ 139 ; XDOS write queue function xdelay equ 141 ; XDOS delay function create equ 144 ; XDOS create process function pllpt equ 0 ; poll printer plco0 equ 1 ; poll console out #0 plco2 equ 2 ; poll console out #1 plco3 equ 3 ; poll console out #2 (Port 3) plci3 equ 4 ; poll console in #2 (Port 3) if debug plci0 equ 5 ; poll console in #0 endif ; const: ; Console Status call ptbljmp 9 stkptr db 'c0in ' ; name db 0 ; console db 0ffh ; memseg ds 36 c0instk: dw 0c7c7h,0c7c7h,0c7c7h dw 0c7c7h,0c7c7h,0c7c7h dw 0c7c7h,0c7c7h,0c7c7h dw c0inp ; starting address c0inq: dw 0 ; ql db 'c0inque ' ; name dw 1 ; msglen dw 4 ; nmbmsgs ds 8 c0inmsgcnt: ds 2 ; msgcnt ds 4 ; buffer c0inqcb: dw c0inq ; pointer dw ch0in ; msgadr ch0in: db 0 c0inuqcb: dw c0inq ; pointer dw char0in ; msgadr char0in: db 0 c0inp: mvi c,makeque lxi d,c0inq call9; compute and jump to hndlr dw pt0st ; console #0 status routine dw pt2st ; console #1 (Port 2) status rt dw pt3st ; console #2 (Port 3) status rt conin: ; Console Input call ptbljmp ; compute and jump to hndlr dw pt0in ; console #0 input dw pt2in ; console #1 (Port 2) input dw pt3in ; console #2 (Port 3) input conout: ; Console Output call ptbljmp ; compute and jump to hndlr dw pt0out ; console #0 output dw pt2out ; console #1 (Port 2) output dw pt3out ; console #2 (Port 3) 99W xdos ; make the c0inq c0inloop: mvi c,flagwait mvi e,6 call xdos ; wait for c0 in intr flag mvi c,writeque lxi d,c0inqcb call xdos ; write c0in queue jmp c0inloop pt0in: ; return character in reg A mvi c,readque lxi d,c0inuqcb call xdos ; read from c0 in queue lda char0in ; get character ani 7fh ; strip parity bit ret ; endif ; ; Console #0 Output ; pt0out: ; Reg C = character to output in sts0 ani 01h jnz tx0rdy push b mvi c,poll mvi e,plco0 9ll xdos ; poll console #1 output pop b tx2rdy: mov a,c out data2 ret ; ; poll console #1 output ; polco2: in sts2 ani 01h rz mvi a,0ffh ret ; ; Poll Console #2 (Port 3) Input ; polci3: pt3st: ; return 0ffh if ready, ; 000h if not in sts3 ani 2 rz mvi a,0ffh ret ; ; Console #2 (Port 3) Input ; pt3in: ; return character in reg A mvi c,poll mvi e,plci3 call xdos ; poll console #0 input in data3 ; read character ani 7fh ; strip parity bit r9E call xdos ; poll console #0 output pop b tx0rdy: mov a,c out data0 ret ; ; poll console #0 output ; polco0: in sts0 ani 01h rz mvi a,0ffh ret ; ; ; Line Printer Driver: TI 810 Serial Printer ; TTY Model 40 ; initflag: db 0 ; printer initialization flag list: ; List Output pt1out: ; Reg c = Character to print lda initflag ora a jnz pt1xx mvi a,27h out 49h ; TTY Model 40 init sta initflag pt1xx: in sts1 ani 01h jnz tx1rdy push b mvi c,poll 9Vet ; ; Console #2 (Port 3) Output ; pt3out: ; Reg C = character to output in sts3 ani 01h jnz tx3rdy push b mvi c,poll mvi e,plco3 call xdos ; poll console #2 (Port 3) output pop b tx3rdy: mov a,c out data3 ; transmit character ret ; ; Poll Console #2 (Port 3) Output ; polco3: ; return 0ffh if ready, ; 000h if not in sts3 ani 01h rz mvi a,0ffh ret ; ; ; MP/M II V2.0 Xios ; ; polldevice: ; Reg C = device # to be polled ; return 0ffh9 mvi e,pllpt call xdos ; poll printer output pop b tx1rdy: mov a,c ; char to register a out data1 ret ; ; Poll Printer Output ; pollpt: ; return 0ffh if ready, ; 000h if not in sts1 ani 01h rz mvi a,0ffh ret ; ; Poll Console #1 (Port 2) Input ; pt2st: ; return 0ffh if ready, ; 000h if not lda c2inmsgcnt ora a rz mvi a,0ffh ret ; ; Console #1 (Port 2) Input ; c2inpd: dw 0 ; pl db 0 ; status db 34 ; priority dw c2instk+18 ; st9 if ready, ; 000h if not mov a,c cpi nmbdev jc devok mvi a,nmbdev; if dev # >= nmbdev, ; set to nmbdev devok: call tbljmp ; jump to dev poll code devtbl: dw pollpt ; poll printer output dw polco0 ; poll console #0 output dw polco2 ; poll console #1 output dw polco3 ; poll console #2 output dw polci3 ; poll console #2 input if debug dw polci0 ; poll console #0 input endif nmbdev equ ($-devtbl)/2 ; number of devices to poll dw rtnempty; bad device handler ; 9kptr db 'c2in ' ; name db 2 ; console db 0ffh ; memseg ds 36 c2instk: dw 0c7c7h,0c7c7h,0c7c7h dw 0c7c7h,0c7c7h,0c7c7h dw 0c7c7h,0c7c7h,0c7c7h dw c2inp ; starting address c2inq: dw 0 ; ql db 'c2inque ' ; name dw 1 ; msglen dw 4 ; nmbmsgs ds 8 c2inmsgcnt: ds 2 ; msgcnt ds 4 ; buffer c2inqcb: dw c2inq ; pointer dw ch2in ; msgadr ch2in: db 0 c2inuqcb: dw c2inq ; pointer dw char2in ; msgadr char2in: db 0 c2inp: mvi c,makeque lxi d,c2inq call x9 ;o; Select / Protect Memory ; selmemory: ; Reg BC = adr of mem descriptor ; BC -> base 1 byte, ; size 1 byte, ; attrib 1 byte, ; bank 1 byte. ; this hardware does not have memory protection or ; bank switching ret ; ; Start Clock ; startclock: ; will cause flag #1 to be set ; at each system time unit tick mvi a,0ffh sta tickn ret ; ; Stop Clock ; stopcRlock: ; will stop flag #1 setting at ; system time unit tick xra a st9dos ; make the c2inq c2inloop: mvi c,flagwait mvi e,8 call xdos ; wait for c2 in intr flag mvi c,writeque lxi d,c2inqcb call xdos ; write c2in queue jmp c2inloop pt2in: ; return character in reg A mvi c,readque lxi d,c2inuqcb call xdos ; read from c2 in queue lda char2in ; get character ani 7fh ; strip parity bit ret ; ; Console #1 (Port 2) Output ; pt2out: ; Reg C = character to output in sts2 ani 01h jnz tx2rdy push b mvi c,poll mvi e,plco2 ca ::a tickn ret ; ; Exit Region ; exitregion: ; EI if not preempted or in dispatcher lda preemp ora a rnz ei ret ; ; Maximum Console Number ; maxconsole: mvi a,nmbcns ret ; ; System Initialization ; systeminit: ; ; This is the place to insert code to initialize ; the time of day clock, if it is desired on each ; booting of the system. ; mvi a,0c3h sta 0038h lxi h,inthnd shld 0039h ; JMP INTHND at 0038H mvi c,create if debug lxi d,c2inpd else lxi d,c0i:tcall will force round robin ; scheduling of processes executing at the same priority ; each 1/60th of a second. ; Note: Interrupts are not enabled until the dispatcher ; resumes the next process. This prevents interrupt ; over-run of the stacks when stuck or high frequency ; interrupts are encountered. jmp pdisp ; MP/M dispatch ; ; ; Disk I/O Drivers ; ; Disk Port Equates ; cmd1 equ 80h stat equ 80h haddr equ 81h laddr equ 82h cmd2 equ 83h ; ; home: ;move to the track o0 positio:npd endif call xdos lda intmsk out 60h ; init interrupt mask db 0edh,056h ; Interrupt Mode 1 ; ** Z80 Instruction ** ei call home mvi c,flagwait mvi e,5 jmp xdos ; clear first disk interrupt ; ret ; & return ; ; Idle procedure ; ;idle: ; ret ; -or- ; ei ; hlt ; ret ; for full interrupt system ; ; MP/M II V2.0 Interrupt Handlers ; flagwait equ 132 flagset equ 133 dsptch equ 142 inthnd: ; Interrupt handler entry point ; All interrup:n of current drive call headload ; h,l point to word with track for selected disk homel: mvi m,00 ;set current track ptr back to 0 in stat ;read fdc status ani 4 ;test track 0 bit rz ;return if at 0 stc ;direction=out call step ;step one track jmp homel ;loop ; seldsk: ;drive number in c lxi h,0 ;0000 in hl produces select error mov a,c ;a is disk number 0 ... ndisks-1 cpi ndisks ;less than ndisks? rnc ;return with HL = 0000 if not ;make sure dummy is 0 (for use in double a:ts gen a RST 7 ; Location 0038H contains a jmp ; to INTHND. shld svdhl pop h shld svdret push psw lxi h,0 dad sp shld svdsp ; save users stk ptr lxi sp,lstintstk ; lcl stk for intr hndl push d push b mvi a,0ffh sta preemp ; set preempted flag in 60h ; read interrupt mask ani 01000000b ; test & jump if clk int jnz clk60hz ; in stat ; read disk status port ani 08h jnz diskintr if not debug in sts0 ani 2 jnz con0in endif in sts2 ani 2 jn:.dd to h,l) xra a sta dummy mov a,c ani 07h ;get only disk select bits sta diskno mov c,a ;set up the second command port lda port ani 0f0h ;clear out old disk select bits ora c ;put in new disk select bits ori 08h ; force double density sta port ; proper disk number, return dpb element address mov l,c dad h ;*2 dad h ;*4 dad h ;*8 dad h ;*16 lxi d,dpbase dad d ;HL=.dpb shld tran ;translate table base ret ; ; ; settrk: ;set track given by register c call headlo:z con2in ; ... ; test/handle other ints ; jmp intdone diskintr: xra a out cmd1 ; reset disk interrupt mvi e,5 jmp concmn ; set flag #5 if not debug con0in: in data0 sta ch0in mvi e,6 jmp concmn ; set flag #6 endif con2in: in data2 sta ch2in mvi e,8 ; jmp concmn ; set flag #8 concmn: mvi c,flagset call xdos jmp intdone clk60hz: ; 60 Hz clock interrupt lda tickn ora a ; test tickn, indicates ; delayed process(es) jz notickn mvi c,: Qad ;h,l reference correct track indicator according to ;selected disk mov a,c ;desired track cmp m rz ;we are already on the track settkx: call step ;step track-carry has direction ;step will update trk indicator mov a,c cmp m ;are we where we want to be jnz settkx ;not yet ;have stepped enough seekrt: ;need 10 msec delay for final step time and head settle time mvi a,20d ; call delay ; ret ;end of settrk routine ; delay: ;delay for c[A] X .5 milliseconds push b delay1: :flagset mvi e,1 call xdos ; set flag #1 each tick notickn: lxi h,cnt60 dcr m ; dec 60 tick cntr jnz not1sec mvi m,60 mvi c,flagset mvi e,2 call xdos ; set flag #2 @ 1 sec not1sec: xra a out 60h lda intmsk out 60h ; ack clock interrupt ; jmp intdone ; ; ... ; Other interrupt handlers ; ... ; intdone: xra a sta preemp ; clear preempted flag pop b pop d lhld svdsp sphl ; restore stk ptr pop psw lhld svdret push h lhld svdhl ; The following dispatch :g:c mvi c,dlycnst ;constant adjusted to .5 ms loop delay2: dcr c jnz delay2 dcr a jnz delay1 pop b ret ;end of delay routine ; setsec: ;set sector given by register c inr c mov a,c sta sector ret ; sectran: ;sector number in c ;translate logical to physical sector lhld tran ;hl=..translate mov e,m ;E=low(.translate) inx h mov d,m ;DE=.translate mov a,e ;zero? ora d ;00 or 00 = 00 mvi h,0 mov l,c ;HL = untranslated sector rz ;skip if so xchg mov b,d ;BC=00:,5 call xdos ; wait for disk intrpt flag pop h pop d pop b mov m,c ;restore 3 bytes below buf inx h mov m,d inx h mov m,e in stat ;test for errors ani 0f0h rz ;a will be 0 if no errors ; error from disk push psw ;save error condition ;check for 10 errors lxi h,errors dcr m jnz redo ;not ten yet. do a retry ;we have too many errors. print out hex number for last ;received error type. cpm will print perm error message. pop psw ;get code ;set error return for opera:Jss dad b ;HL=.translate(sector) mov l,m mov h,d ;HL=translate(sector) ret ; setdma: ;set dma address given by registers b and c mov l,c ;low order address mov h,b ;high order address shld dmaad ;save the address ret ; ; read: ;perform read operation. ;this is similar to write, so set up read ; command and use common code in write mvi b,040h ;set read flag jmp waitio ;to perform the actual I/O ; write: ;perform a write operation mvi b,080h ;set write command ; waitio: ;ent:ting system mvi a,1 ret redo: ;b still has read/write flag pop psw ;get error code ani 0e0h ;retry if not track error jnz tryagn ; ;was a track error so need to reseek push b ;save read/write indicator ;figure out the desired track lxi d,track lhld diskno ;selected disk dad d ;point to correct trk indicator mov a,m ;desired track push psw ;save it call home pop psw mov c,a call settrk pop b ;get read/write indicator jmp tryagn ; ; ; step: ;step head out towards ze:er here from read and write to perform the actual ; I/O operation. return a 00h in register a if the ; operation completes properly, and 01h if an error ; occurs during the read or write ; ;in this case, the disk number saved in 'diskno' ; the track number in 'track' ; the sector number in 'sector' ; the dma address in 'dmaad' ;b still has r/w flag mvi a,10d ;set error count sta errors ;retry some failures 10 times ;before giving up tryagn: push b call headload ;h,l poi:Lro ;if carry is set; else ;step in ; h,l point to correct track indicator word jc outx inr m ;increment current track byte mvi a,04h ;set direction = in dostep: ori 2 out cmd1 ;pulse step bit ani 0fdh out cmd1 ;turn off pulse ;the fdc-2 had a stepp ready line. the fdc-3 relies on ;software time out mvi a,16d ;delay 8 ms jmp delay ; ret ; outx: dcr m ;update track byte xra a jmp dostep ; headload: ;select and load the head on the correct drive lxi h,prtout ;old sle:nt to track byte for selected disk pop b mov c,m ; decide whether to allow disk write precompenstation mvi a,39d ;inhibit precomp on trks 0-39 cmp c jc allowit ;inhibit precomp mvi a,10h ora b mov b,a ;goes out on the same port ; as read/write allowit: lhld dmaad ;get buffer address push b ;b has r/w code c has track dcx h ;save and replace 3 bytes below ;buf with trk,sctr,adr mark mov e,m ;figure correct address mark lda port ani 08h mvi a,0fbh jz sin ani 0: |ct info mov b,m dcx h ;new select info mov a,m inx h mov m,a ori 10h ; enable interrupt out cmd2 ;select the drive ani 0efh ;set up h.l to point to track byte for selected disk lxi d,track lhld diskno dad d ;now check for needing a 35 ms delay ;if we have changed drives or if the head is unloaded ;we need to wait 35 ms for head settle cmp b ;are we on the same drive jnz needdly ;we are on the same drive ;is the head loaded? in stat ani 80h rz ;already loaded needd:gfh ;was double ;0bh is double density ;0fbh is single density sin: mov m,a ;fill in sector dcx h mov d,m lda sector ;note that invalid sector number ;will result in head unloaded ;error, so dont check mov m,a ;fill in track dcx h pop b mov a,c mov c,m mov m,a mov a,h ;set up fdc dma address out haddr ;high byte mov a,l out laddr ;low byte mov a,b ;get r/w flag out cmd1 ;start disk read/write rwwait: push b push d push h mvi c,flagwait mvi e ;y;ly: xra a out cmd1 ;load the head mvi a,70d jmp delay ; ret ; ; BIOS Data Segment ; cnt60: db 60 ; 60 tick cntr = 1 sec intstk: ; local intrpt stk dw 0c7c7h,0c7c7h,0c7c7h,0c7c7h,0c7c7h dw 0c7c7h,0c7c7h,0c7c7h,0c7c7h,0c7c7h dw 0c7c7h,0c7c7h,0c7c7h,0c7c7h,0c7c7h dw 0c7c7h,0c7c7h,0c7c7h,0c7c7h,0c7c7h lstintstk: svdhl: dw 0 ; saved Regs HL during int hndl svdsp: dw 0 ; saved SP during int hndl svdret: dw 0 ; saved return during int hndl tickn: db 0 ; ticking boolean,true = delayed;buff ; cons equ 1 ;read console typef equ 2 ;type function printf equ 9 ;buffer print entry brkf equ 11 ;break key function openf equ 15 ;file open readf equ 20 ;read function ; ; non graphic characters cr equ 0dh ;carriage return lf equ 0ah ;line feed ; ; file control block definitions ;fcbdn equ fcb+0 ;disk name ;fcbfn equ fcb+1 ;file name ;fcbft equ fcb+9 ;disk file type (3 characters) ;fcbrl equ fcb+12 ;file's current reel number ;fcbrc equ fcb+15 ;file's record count (0 to 128) ;fcbc; if debug intmsk: db 44h ; intrpt msk, enables clk intrpt, & con2 else intmsk: db 54h ; intrpt msk, enables clk intrpt, & con0/2 endif preemp: db 0 ; preempted boolean ; scrat: ; start of scratch area track: db 0 ; current trk on drive 0 trak1: db 0 ; current trk on drive 1 trak2: db 0 trak3: db 0 sector: db 0 ; currently selected sctr dmaad: dw 0 ; current dma address diskno: db 0 ; current disk number dummy: db 0 ; must be 0 for dbl add errors: db 0 port: db 0 prtout: db 0 dnsty:;r equ fcb+32 ;current (next) record number ;fcbln equ fcb+33 ;fcb length ; dump: ; set up stack lxi h,0 dad sp ; entry stack pointer in hl from the ccp shld oldsp ; set sp to local stack area (restored at finis) lxi sp,stktop ; print sign on message lxi d,signon call prntmsg ; read and print successive buffers call setup ;set up input file cpi 255 ;255 if file not present jnz openok ;skip if open is ok ; ; file not there, give error message and return lxi d,opnmsg call prntm;8 db 0 ; disks 2 bpb equ 2*1024 ;bytes per block rpb equ bpb/128 ;records per block maxb equ 255 ;max block number diskdef 0,1,58,,bpb,maxb+1,128,128,2,0 diskdef 1,0 ; tran: ds 2 ; endef db 0 ;force out last byte in hex file end , alloc vectors dpb0 equ $ ;disk param block endif if asm and sgl dw 26 ;sec per track db 3 ;block shift db 7 ;block mask db 0 ;extnt mask dw 242 ;disk size-1 dw 63 ;directory max db 192 ;alloc0 db 0 ;alloc1 dw 16 ;check ;[sg jmp finis ;to return ; openok: ;open operation ok, set buffer index to end mvi a,80h sta ibp ;set buffer pointer to 80h ; hl contains next address to print lxi h,0 ;start with 0000 ; gloop: push h ;save line position call gnb pop h ;recall line position jc finis ;carry set by gnb if end file mov b,a ; print hex values ; check for line fold mov a,l ani 0fh ;check low 4 bits jnz nonum ; print line number call crlf ; ; check for break key call break ; accum lsb = 1 if ;size dw 2 ;offset xlt0 equ $ ;translate table db 1 db 7 db 13 db 19 db 25 db 5 db 11 db 17 db 23 db 3 db 9 db 15 db 21 db 2 db 8 db 14 db 20 db 26 db 6 db 12 db 18 db 24 db 4 db 10 db 16 db 22 endif if asm and dbl xlt0 equ 0 endif if asm begdat equ $ dirbuf: ds 128 ;directory access buffer alv0: ds 31 csv0: ds 16 endif if asm and dbl ds 16 endif if asm enddat equ $ datsiz equ $-begdat endif end ; character ready rrc ;into carry jc purge ;don't print any more ; mov a,h call phex mov a,l call phex nonum: inx h ;to next line number mvi a,' ' call pchar mov a,b call phex jmp gloop ; purge: mvi c,cons call bdos finis: ; end of dump, return to ccp ; (note that a jmp to 0000h reboots) call crlf lhld oldsp sphl ; stack pointer contains ccp's stack location ret ;to the ccp ; ; ; subroutines ; break: ;check break key (actually any key will do) push h! push ;B; NOTE: ; In order to execute this sample DUMP utility you ; must assemble EXTRN.ASM and then link DUMP and EXTRN to ; create the DUMP.PRL file. This is shown below: ; ; 0A>RMAC dump ; 0A>RMAC extrn ; 0A>LINK dump,extrn[op] ; title 'File Dump Program' cseg ; File dump program, reads an input file and ; prints in hex ; ; Copyright (C) 1975, 1976, 1977, 1978, 1979, 1980, 1981 ; Digital Research ; Box 579, Pacific Grove ; California, 93950 ; ; Externals extrn bdos extrn fcb extrn ;;d! push b; environment saved mvi c,brkf call bdos pop b! pop d! pop h; environment restored ret ; pchar: ;print a character push h! push d! push b; saved mvi c,typef mov e,a call bdos pop b! pop d! pop h; restored ret ; crlf: mvi a,cr call pchar mvi a,lf call pchar ret ; ; pnib: ;print nibble in reg a ani 0fh ;low 4 bits cpi 10 jnc p10 ; less than or equal to 9 adi '0' jmp prn ; ; greater or equal to 10 p10: adi 'A' - 10 prn: call pchar ret ; phex: ;pr;}I hstblk equ hstsiz/128 ;MP/M sects/host buff cpmspt equ hstblk * hstspt ;MP/M sectors/track secmsk equ hstblk-1 ;sector mask smask hstblk ;compute sector mask secshf equ @x ;log2(hstblk) ; ;*** ;*  * ;* BDOS constants on entry to write  * ;*  * ;**%* wrall equ 0 ;write to allocated ;int hex char in reg a push psw rrc rrc rrc rrc call pnib ;print nibble pop psw call pnib ret ; prntmsg: ;print message ; d,e addresses message ending with "$" mvi c,printf ;print buffer function jmp bdos ; ret ; ; gnb: ;get next byte lda ibp cpi 80h jnz g0 ; read another buffer ; ; call diskr ora a ;zero value if read ok jz g0 ;for another byte ; end of data, return with carry set for eof stc ret ; g0: ;read the byte at buff+reg a mov e,a ;ls byte of buff;OJwrdir equ 1 ;write to directory wrual equ 2 ;write to unallocated ; ;*** ;* q * ;* The BDOS entry points given below show the * ;* code which is relevant to deblocking only. * ;*  * ;**o* ; ; DISKDEF macro, or hand coded tables go here dpbase equ $ ;disk param block base ; boot: wboot: ;;+er index mvi d,0 ;double precision index to de inr a ;index=index+1 sta ibp ;back to memory ; pointer is incremented ; save the current file address lxi h,buff dad d ; absolute character address is in hl mov a,m ; byte is in the accumulator ora a ;reset carry bit ret ; setup: ;set up file ; open the file for input xra a ;zero to accum sta fcb+32 ;clear current record ; ; open the file in R/O mode lxi h,fcb+6 mov a,m ori 80h mov m,a ;set f6' on lxi d,fcb mvi c,openf ;enter here on system boot to initialize xra a ;0 to accumulator sta hstact ;host buffer inactive sta unacnt ;clear unalloc count ret ; home: ;home the selected disk lda hstwrt ;check for pending write ora a jnz homed sta hstact ;clear host active flag homed: ret ; seldsk: ;select disk mov a,c ;selected disk number sta sekdsk ;seek disk number mov l,a ;disk number to HL mvi h,0 rept 4 ;multiply by 16 dad h endm lxi d,dpbase ;base of parm block dad d ;hl=;M call bdos ; 255 in accum if open error ret ; diskr: ;read disk file record push h! push d! push b lxi d,fcb mvi c,readf call bdos pop b! pop d! pop h ret ; ; fixed message area signon: db 'MP/M II V2.0 File Dump' db cr,lf,'$' opnmsg: db cr,lf,'No input file present on disk$' ; variable area ibp: ds 2 ;input buffer pointer oldsp: ds 2 ;entry sp value from ccp ; ; stack area ds 64 ;reserve 32 level stack stktop: ; end dump ; w.dpb(curdsk) ret ; settrk: ;set track given by registers BC mov h,b mov l,c shld sektrk ;track to seek ret ; setsec: ;set sector given by register c mov a,c sta seksec ;sector to seek ret ; setdma: ;set dma address given by uBC mov h,b mov l,c shld dmaadr ret ; sectran: ;translate sector number BC mov h,b mov l,c ret ; ;*** ;* ! * ;* The READ entry point takes;Esy = 1 exitm endif ;; @y is not 1, shift right one position @y set @y shr 1 @x set @x + 1 endm endm ; ;*** ;*  * ;*  MP/M to host disk constants  * ;*  * ;**y* blksiz equ 2048 ;MP/M allocation size hstsiz equ 512 ;host disk sector size hstspt equ 20 ;host disk sectors/trk <<U> the place of * ;* the previous BIOS defintion for READ. * ;*  * ;*** read: ;read the selected MP/M sector xra a sta unacnt ;unacnt = 0 inr a sta readop ;read operation sta rsflag ;must read data mvi a,wrual sta wrtype ;treat as unalloc jmp rwoper ;to perform the read ; ;*** ;*  <per: ;enter here to perform the read/write xra a ;zero to accum sta erflag ;no errors (yet) lda seksec ;compute host sector rept secshf ora a ;carry = 0 rar ;shift right endm sta sekhst ;host sector to seek ; ; active host sector? lxi h,hstact ;host active flag mov a,m mvi m,1 ;always becomes 1 ora a ;was it already? jz filhst ;fill host if not ; ; host buffer active, same as seek buffer? lda sekdsk lxi h,hstdsk ;same disk? cmp m ;sekdsk = hstdsk? jnz nomat< k* ;* The WRITE entry point takes the place of * ;* the previous BIOS defintion for WRITE. * ;*  * ;*** write: ;write the selected MP/M sector xra a ;0 to accumulator sta readop ;not a read operation mov a,c ;write type in c sta wrtype ani wrual ;write unallocated? jz chkuna ;check for unalloc ; ; write to unallocated, set parameters# mvi a,blksiz/128 ;next unalloc r<uch ; ; same disk, same track? lxi h,hsttrk call sektrkcmp ;sektrk = hsttrk? jnz nomatch ; ; same disk, same track, same buffer? lda sekhst lxi h,hstsec ;sekhst = hstsec? cmp m jz match ;skip if match ; nomatch: ;proper disk, but not correct sector lda hstwrt ;host written? ora a cnz writehst ;clear host buff ; filhst: ;may have to fill the host buffer lda sekdsk sta hstdsk lhld sektrk shld hsttrk lda sekhst sta hstsec lda rsflag ;need to read? ora a cnz r<:g title 'External Reference Module' bdos equ 0005h fcb equ 005ch tfcb equ 006ch buff equ 0080h public bdos public fcb public tfcb public buff end -SIMPIO LIBaSEQIO LIBRbcdSTACK LIB eCBIOS64 COM"fgDSTACK LIBPhijCOMPARE LIB kNCOMPARELIB lWHEN LIBm<eadhst ;yes, if 1 xra a ;0 to accum sta hstwrt ;no pending write ; match: ;copy data to or from buffer lda seksec ;mask buffer number ani secmsk ;least signif bits mov l,a ;ready to shift mvi h,0 ;double count rept 7 ;shift left 7 dad h endm ; hl has relative host buffer address lxi d,hstbuf dad d ;hl = host address xchg ;now in DE lhld dmaadr ;get/put MP/M data mvi c,128 ;length of move lda readop ;which way? ora a jnz rwmove ;skip if read ; ; write o<kcmp ;sektrk = unatrk? jnz alloc ;skip if not ; ; tracks are the same lda seksec ;same sector? lxi h,unasec cmp m ;seksec = unasec? jnz alloc ;skip if not ; ; match, move to next sector for future ref inr m ;unasec = unasec+1 mov a,m ;end of track? cpi cpmspt ;count MP/M sectors jc noovf ;skip if no overflow ; ; overflow to next track mvi m,0 ;unasec = 0 lhld unatrk inx h shld unatrk ;unatrk = unatrk+1 ; noovf: ;match found, mark as unnecessary read xra a ;0 < peration, mark and switch direction mvi a,1 sta hstwrt ;hstwrt = 1 xchg ;source/dest swap ; rwmove: ;C initially 128, DE is source, HL is dest ldax d ;source character inx d mov m,a ;to dest inx h dcr c ;loop 128 times jnz rwmove ; ; data has been moved to/from host buffer lda wrtype ;write type ani wrdir ;to directory? lda erflag ;in case of errors rz ;no further processing ; ; clear host buffer for directory write ora a ;errors? rnz ;skip if so xra a <Oto accumulator sta rsflag ;rsflag = 0 jmp rwoper ;to perform the write ; alloc: ;not an unallocated record, requires pre-read xra a ;0 to accum sta unacnt ;unacnt = 0 inr a ;1 to accum sta rsflag ;rsflag = 1 ; ;*** ;* 9 * ;* Common code for READ and WRITE follows * ;*  * ;*** rwo <Q<qMR;0 to accum sta hstwrt ;buffer written call writehst lda erflag ret ; ;*** ;* , * ;* Utility subroutine for 16-bit compare * ;*  * ;*** sektrkcmp: ;HL = .unatrk or .hsttrk, compare with sektrk xchg lxi h,sektrk ldax d ;low byte compare cmp m ;same? rnz ;return if not ; low b<=6>!==)H!=.):==O! *9N 3)  :=<2=)*9"9:W)͘*8"9d9w7+s#rí(!94~ ڠ)6*9#"9*9{zڔ)!"9*9!=~2=xG:=2=G k)x{_ )#º)>ɯ`iq#z)COMPRLRSPSPROVLSYM!=q*9= :=w*9#"9!98*=*9DM\4!"9!=q:=!=2=:=<2=K*!=6*=M)!=6!=q*=M)*9#"9!=p+q*=}OL**=|OL*:9*:8ʊ*+*8"9:9Ҥ*L**9DM_*!=6L=!=**=&9 N!9 87/*H**=&9 N+!=4©*:8:8<K M3iͦ9*9Mi"!98f"/ͲR/Ͳ Ͳ+=66Ô"9*9*9*9*9i*9*9"99*9M/"9*9i*9DM̈́ 9*9M#ʹ"=R66#*9&9) 9<HH +p,!=q:=#+*9"=4+*=&9) ^#V"==97F+29@6=97Z+L*F+*=&:) N#F3*=&9) >8ҕ+:=+*9DMͨ+Õ+ͨ+897ҧ+*9"8!=p+q*="=*=&9) =l7+!=8+*=DM:4OL**="=Ҵ+:9=O!9 N!9 !9 l7*87"=L**=DM_*L*:8B,_*L**8DM_*U,*8DM_*L*_*!=6>!=o,L*!=4Z,*8"9:9Ҍ, - - -!=6:9=!=,*=&9 ~2=,*=&9) 97, -î,:,v-,7-!=4‘,*8*=9 8, -,:= <l7DM*9MF?#9*9*9&9) 9l7*9i*9&9) N#F*9*9DM!<6@#!<6*9"9*9M :9œ#*9*9"9û#*9&9) 9l7*9&9) q#p:9#!<6*9&9) N#F̈́ *9"9>!98:9H*$:9 $=@6*$*9&9) 9l7"9:929!96:9>$i);$*$!t=6>!t=ڝ$*t=&9) *t=&9) l7*t=&9) q#p*t=&9) q#p*t=&9) >w#6:t=<2t=C$997ү$*9"9:ҿ$͘*8"9 :9/29:8$d!!w=s+p+q:w=%*9*u="u=:9$!w=6%<- -,!=q*=M**9#"9=971- -- -*=&9) ^#V"9>9 8u-ͅ*=&9) {7"=-͚"9H-*=&b;) N#F*; ~Ҷ-*; DM4*; *;##N#Fq#p-*;##q#p2=:=.*=&9) {7"="8:=O>-"8-2=->9͎7>7".) .=*9DM\4\4:8ZA.. \v9 -I.:e y..*8&ͺ7) DMe -q.:8ʇ.:82\\͠4:8 ¥.. 8\ -.!"9}2=2=v* .:8Z.. \v9 -..e) -.:8.:82\\͠4!"9}2=<*w=&9) u=l7+s#r*9&9) N#F*9ͮ?%*u=DM*w=Mkg%*9&9) N#F*u=*w=*9  !x=q:x=ځ%́>!x=ڍ%͐:x=›%ͣ!7&:x=©%!7&:x=·%#7&:97&:x==O!& ^#V!7&7&"7&Q=7&-"7&͕"7&"7&j#7&@#7&x#7&#7&%%%%%%%%%& &&&!y=6i)`&i)2{=:9]&*{=M à&i)2z=‡&i)2y=:y=҄&*y=Mr%à&8"|=:9Ҡ&*|=DM*z=$:y=8&ʯ&ä&!968&&õ&!96!"9"9:u9='*s97"9"9. P9\ -&i)2N9!h< hͻ"9997Ҍ/͙/͕H{/DM/ )!=6H!=[/:==O! *9N):=<2=3/:=<2=v/ ) ){/ )d9w7+s#r/ ) ) .!=q> !=ڳ/:=0O)þ/:= AO)!=q:=O͚/:=O͚/!=p+q*=|OͿ/*=}OͿ/*=!͛7"=*=!͛7!=s:h.0:=2h\5.0\5͒4*=!͛7!|s*87"=. \8 -S0:8m0*="=\4/TB\4!=s*=!͛7TB "8*8*8s#r/TB*=&ͺ7DM\4:j2j\4:80*8͇7"8:AZ081>0<':N92h\5'\<͒4i)2|2O9!p96*9"9!"J9"L9 :9/29:u9!9Z' ]'ͤ&:e x'.e, -p'/eͶ)2u9\4& /Һ' iͻ"9997҇(͙v(:82\!~=6>!~='(H!~=(*~=&\ 6 (:~==O! *9*~=&\ w:~=<2~='!u96.e2 -4(\͵4/b(!u96.e5 -T(\4*9"=!96&*="9d9w7+s#r'.9& -(!96!96 ͻ"9997h)ʹ/W)*9DMF $ !"9  *9"=͕"*="9! =O=181>0!=q.*= :=w*= ~!=q*= :=w*= *= ^#VN#F) *= 6*=^#V!͛7"=͝7!=s&1!=ʮ1*= DM4*=M/1*= DM5®15@6*=!͛7M1*=  *= 71*=  *= N#Fq#p *= ~ 2*= DM͠4 *= 6b1*= N#F*= *= N#F4?1!=p+q*= N#F*=͝7ͼ7*=q#p*=*= l7+*=##q#p*=*= N#F^#V͝7*= s#r *= N#F`i"=*= N#F `i"=*="===72*=+*= ^#Vͺ7DM52ͽ1*="=Һ2*= ^#V*=ͺ7DM=? YYDATA $$$ YYCOMM $$$ ::;:;   ,!ï>s T*T>HCԅÁjfvR}Ђʅ|ʃ`~w+$0ڀH<灔j"7_kʄք H`\ 0<.^ 889  WU!UINDEX ERR=-52*=  *= 73b1*= N#F*= *= N#F4!=s+p+q*==7s3 *= ~e3ͽ1*=DM5233*=##=73 *= ~ґ3ͽ1*=DM52:=3*=  *= N#FPY83͔2333*=  *= 73?133!=p+q*="=!=s+p+q*=DMB3*= ^#V"=*= N#F*=͝7*=:=w *= 6!=p+q*=DMB3*= ^#V"=*= N#F*=͝7*=~   ĉ4{>.̉4s4OͲp45@6646<5@645<>45<5͒45<5@6! w #4>4>25"5"5=OR$MULTIPLE DEFINITION: $MAIN MODULE ERROR$FIRST COMMON NOT LARGEST$COMMON ERROR$UNRECOGNIZED ITEM $徃*+O| -:PF -:0V2 08D9 ALV3 097D ALV4 0AA1 BSCEND 0A21 BSCTBL 0AA1 BUFF1 0FBB CON00 101D CON01 107F CON02 0853 CSV1 0896 CSV2 08D9 CSV3 097D CSV4 159B DIRBUF 1447 LDB100 1475 LDB101 14B7 LDB510 14F5 LDB511 13FF MPT 1215 PAT 1421 PDB000 0F49 SIOPT1 0AA1 SYSIN2 0853 SYSIN3 0D78 ATNINT 0F95 CENPTR 12AC INTXR 1=_yo`"5!"555@6*5|v5 "5*5MD*6*5DM:5I565@6b56b5*5|v55*5͒4*5"5*5#"55*6*5?\ABORTED$NO SPACE$NO FILE: $CANNOT CLOSE$DISK READ ERROR: $DISK WRITE ERROR$YYYP   YP*6YPYPYPYPYPYP Ͳ ò!=6#65"=*=|‚6>8 8"=##*= ~6!=6â6*=|6!=616"=â6!=6:=ҷ6!=6#6#66*=~2=*= ~2=:=6:=2=*= ~2=!=6>!=7*=&= ~/*==29A INTXSI 11EE PTXDOS 0D04 REDINT 0CA4 WRTINT 10EA PDISP 1155 SELBNK 10E7 SWTSYS 10E4 SWTUSR 10F0 SYSDAT 120F PTLB 0000 BSCTB1 15CC EXIT "158B BPBPL 1575 BPT 017E DIVIDE 1567 DMABPB4@1@7@!O@@@@"@%@(@+@.@1@4@7@:@=@@@C@F@I@L@@6~#T@ MPM 2.1 setup menu, select function by number $ 1) Copy bootfile to hard disk $ 2) Change default logical nam.es $ 3) Console baud rate setup $ 4) Print=0&9 w!=4697"9 *9"= *9"9*G9M *H9M *I9M *=M *=M *=M *="9i`N#Fog_og_{ozg_ogDM!>))덑o|gҴ7 =¢7DM!>))7 =7_{ozg^#V) 7^#V|g}o 7_{ozgi`N!#Fogo&og_{_z#W6\ *F*6'QFU LINK 1.3 $?MEMRY$MEMRYXTEMPXIOSSPR?ME= er setup $ 5) Update setup $ 6) Exit $ **** IO ERROR TRY AGAIN *** $ *** WRONG MPM VERSION NUMBER , OR DISK DOES NOT CONTAIN BOOT RECORDS *** $ TRY ANOTHER DISK $ Updating bootsectors on hard or floppy device?, Reply with "H" or "F" $ Insert diskette to be updated and reply with drive letter when ready $ MPM bootsectors updated $ 0 DO NOT CHANGE BAUD RATE $ 1 110 BAUD $ 2 300 BAUD $ 3 600 BAUD $ 4 1200 BAUD $ 5 2400 BAUD $ 6 4800 BAUD $ 7 9600 BAUD $ Select baud rate==}MMORY OVERFLOW, USE [A] SWITCH$INSUFFICIENT MEMORY$OVERLAPPING SEGMENTS$ $TEMPXIOS OB6XIOS2H  .Pïï3?FPBNX PBXXABS $$$  PFXXPROG $$$ PfXXDATA $$$ P~XXCOMM $$$ 9-:\::YYABS $$$ YYPROG $$$ ==! from following list for console # $ and console # $ MPM 2.00S5 supports two printers, one parallel and one serial $ Do you have a parallel printer, reply with "Y" or "N" $ Printers are numbered as 0,1 $ Specify number for the parallel printer $ Select printer baud rate for the serial printer # $(Auxillary port) $ BOOTFILE COPIED TO HARD DISK $ Available names are letters "A" through "P" , Reply with appropriate letter $FLOPPY $ DEVICE # $HARDDISK $ DEVICE # $ = $ Illegal name, retry $ VIRT= w<:wAO!.O Hq%M:wAO!.O :ww:w<2wcL!BO6DͬF̀F2wͼF:wAO!.O 6!BO6!-O6!?O6#6#6#6!IO6!NO6!GO6!>O6!HO6!O6>!OڦM*O&OO 6:O<2OˆM!O6>!OM*O&.O 6:O<2O«MͼFEͬFͼFͼFͼF@2NO*NOM!&N ^#V!@O6!-O6.N!@O6!-O6.N!@O6!-O6.N!@O6!-O6.NMM NN!NO6BEͬF:-O0OpFͼFͼFLLi`N#Fog_{_z#WG+GEGF2O:OYN@2O*OM!N ^#V!O6!O6N!O6!O6N!O6!O6N!O6!O6NNNNN!O6EG:O0OF+G+GLi`N#Fog_{_=UAL DISK NAME = $ ALTOS MPM 2.00S0 SYSTEM SETUP PROGRAM V1.0 $ Number of logical devices available on this system is $1-O1-O@;F2OWMF̀F12O:OE*OM!E ^#V&LEMEDKEͣKEXIE@EEEEEEEÎEv!ywp+q*xw@!{wp+q*zw@!}wp+q*|w@!wp+q*~w@!wp+q*w@@2w:w!wq*w&@=@2w:w@@2w:w!wq*w&@@2w:wa/>z!w/HҨF:w:w!wp+q*w @ pF pFͼF^@ͬFͼF@ͬF@ͬF@ͬF@ͬF AͬFAͬFͼFͼF*=Sz#W, 0 F ^#V#! ))))o͂ $s#r#!46# ʈ, , 3OO4 G4GG MPMHDLDRCOM  :M?PCP!^^#V4 G4GG MPMHDLDRCOM y+"!91*:~!~6ʺ=G#^#V#~xé#"!N#F{*>7 *|+" :; =AͬFEJAͬFͼFAͬFE!wq:w0GZF2w6GdF2w:w!wp+q*O&hP *w "O3"OQN*O"O##QN*O"O##QN*O"O QN*O"O *O QN*O"O!"O*ODM@!"O>!OYNH*ODM@!"O>$!OYNrH*ODM:@*ODM@G2O:O[HF*O"O*O"O-H*O"OH!hP"O!"O>!OYNH*ODM@!"O>$!OYNH*ODM@*ODM:@G2O:OHF*O"O*O"OҥH*O"OҌH!hP"O!=ڻV"p+q##ͷs* .~2"* #ڬ~2N2:η1*.4"*. -* DM*!q#p!5~G0! w!p*#r.+ͷ&ͷͷ* |.f."g.f."g.;q#p.". "."*~2#!Ow# \ ͜*^#V"*|ʗ"^9#pyright (C) 1982, Digital Research$Init (Tmpx * .s8Ü,JCOPYRIGHT (C) 1981, DIGITAL RESEARCH ! Altos MP/M II V2.10S0 Co="O*ODM@!"O>OEJ*O>w:IO0*O w:BOUJ*O:BOw:POwJ*PO&O) *O N#Fq#p:GOʙJ*GO&O) *O N#Fq#p:BOʸJ. *O .O -°J!hP"O*OM @:wHJHJͮG*OM @ͼF3!vwx?!6o*.~G */  [!/* "|( _x= >2=CFBͬFBͬFBͬFBͬFBͬFͼF̀F2w>/!w~8H@K:wJ!w6>!wڢKͼFBͬF:w1OpF:w{K$CͬF:w2OpFJ2w:w0ʘK:w0*w&OO w:w<2wIK!NO65CͬFͼFͼFwCͬFͼF̀F2NO:NOYK!>O6ͼFCͬFͼFCͬFͼF̀F2IOCͬF!w6:w1OpF3DͬFͼFJ2w:w0%L:w0*w&GO w!"O!w6*wM @ͮGEDͬFͼF*OM @ͼFeDͬFͼF:@O2w!w6:-O=!w/M!w6ͼF>!wҞLDͬFDͬF:w1OpF:w=2wüLDͬFDͬF!@O:w1OpF!w6DͬF̀F2w:wA>P!wHLDͬFXL:w:@OHM: >>:brˠ--/?i&)))*.F####~8Oy8!jˆ!v6?>? :ʮʰJWxѹ/! s1!ås1!Es1!s1:ɷ(͎!5+~w#w͎:ɷ>2ɯ2?ås1!Es1!s1!\ås1!\Es1!\s1! s1! Es1͎>2 2 9: 2{ËM^{Ë^{~O>8y: 2s1!>C/(((!!!!>>(>0)_: ŷ{ _:AƷ{ _:ŷ{ -_:}ŷ{ /*j~### 6~(!N#F#^q#Vps#r V#^#QY~( "j#### a##a>/!p}!}/>)_: ŷ{ _:}ŷ{ />_:}ŷ{ />_: ŷ{ >)_:AƷ{ _:ŷ{ ->_:AƷ{ _:ŷ{ -B !f!` >` >>lϏ7^`7!#^#V+V+^ ^#V>I!>>ɯ: ͎>2 2 Ǻ6\ž \ž \ž 6s1 G(>#2s1(%2G ǰ !!!!!:!:Ǻ0{2 2 Z^#VfneW: :ǷzQ>!!8ÕFO8ÜÎƯ ?G S"!͜ͅÈG ?}ϳͅ ͈  ( !? BBBZZZZƂ>Ndisk drive #1 not available for MP/M$Bad sector table full. Re-assemble XIOS$νCν+͞ 4> 2н!/(FNr s !4t~# !{b!bV ^ ~$O#Hard }H2ηGOC̷+Y͞H[~BKCν+͞HV ^ !ͷR<<:<0s!>2н!<():н=2н Kl/ͼV""fk</̷(~  ==l!/ͼ  / !FNͨ>!?-,  6 XXXZZZZ\?/. ~~~ŖŖŖžq#~ ~ nfut4ķ ^ ͏yN y>Nyx >ȯͺķ ^ ͏yN yNy>>Nyx H >=~! ^~  ~ yN y nf~(~ ~  ^>   ( p!~w"~w#~w$~w%44> fnRtu44~wɯww~w~w~wɯ>(Vx =y~( G#O#Gxy͎͎#͎:h y!χh y!χNV^fn+>(<!D5 6!C5  ñf n F%I <V H <V KFCFﺷ  !F ɯGOVVV>2E>2K!\"Ll "bSd#>>2D>2C WxͶѹ ?ݶ KJ*L:EG>x@( Ͷ N ͞ N :E>͎ ~ Mx  M M~! ~nff>Nyx>~! 7~ ^͏nfN#~ ~ nfu f M ^͎;N>y@X  È V(U F K~(E=wnf~ y #~ ~ nfut n(~ݾ 0 ^fut n(~ݾ 0 ^͎;N @ ^( Mnf~(~ ~  FM>y Mxw#~ ~ nfut4"< V ~  N>(yM=wnf~N y#~ ~ n >C>E!|! N(V ^ V^{"z"Rrs>>< N(~~w N(~~w!>2E>2K!N"Ll ST"V 8͎͎͎:(yϿ(yχ~ݾ www> >ί""fn}Ox東ȯո!+5 6!*5 ES@"B!;:)G>ո!+5 6!*5  > ñl>2+>2*~ ?ݶww:( >ί~ݾ>~w:(>~w2)G濰~wS2"4!-:)G >u2n!o>w#w#w) “2j=ͧͨP*@:n>=)ί2n2n?ů*|ȯ2O<2Q*@|<2Qͺ:nͷ*6"B:R:?92?T ~w'͌'͌"'ͪ^a*@}/_|/*#W}_*!"#E"!*%E"%*#:n—>Ü>O2CFtƱyo&)!^#VÛ М*#:Z9*@T s#r",Óͷ*:>2:ZO!͢nʗ*!ͪ ͑!͚^E+͚^>2͜2dF:P^͂͜:i@[*  Q>jw p͍:N2i@2l:ytE ͕ ͕fn^#Vͬqfnͬq  ~((Fp>~ 2(!!. F(Ͷ8 7ZZ7*ѷNV^ /̷(͜[Ƿ!/̷(ͼfn>"Է:!.:˷ݾ "ԷV^*ɷR($ = [ַ:˷co"ַ !>*Է>V^*̷R V^*ηR .R>" :ӷ(!N!^B F( Ͷ *ɷtu!̷w :˷w ! 8*Ƿtu:˷w2˷!>]IͪxǥCIͽƒ:i¤>G:y<ʹĭ*}ܭ##:NR++ܭ:NR:P͚Eͩ͜Iͽ˟ *@͚ EϤä~?2ĢFͺ~?A md"U# ț'͌x'͍͌2i2P'@ͽͼɤä'͍2i!>2jǥ¿͢Ǭ>>2ͳ:B<ͺ:i + N#F p+q fnͳ(*}> ÅP"> Å?d##:iRW*v"t) 4d#4d>Å++RE:i@wͲtĔ͜:N>!B0 = {/_z/Wv*ɷV( \͡!" ( ͡"y2ӷv*ɷV(\Ͷ(:ӷ0͡f n*ŷfn *ɷN~S̷}2η*ɷi`NB}^(< "Ϸg.<"ѷCǷ!B|( n&*ɷn >ȥ- :ʹ8>! N84! N#FFNF("ɷ"ŷfnN!*ɷ~  fnfnÂÕ$ÚÚشÐ +YÞϵÍkstzmÊï >Ȕr>*@6TmH͔ͽ:l`ʸЫ*@ЫЫ#~Ы> 2i*@ ~Ы2lFI͚EOxͮy@̨>2m6ǥ! >2j:l` $ƘÀ*@:?wǥI͍ͪ<@2lGG>2ixc:?c>2<22}C͔!w:g>`2l Program !0!"@aʤKó!"!"#"%"'2Z=2nfx+ xʅé+f2n*'—:nѲ2hXe!k=2џ!)R#:i4nn͍2iV*r~!i~+6 GU+U x2N~aR6I":l:i G 1"w*@6:w:[2Z*=*B}D > ||2n*)*'}o|g"'x͕*%—*!:n—G:ͤ!"t):*)DM:nͬ")ȩ*@L"@Ĕ!x# g͑!"tgg)###oĔ#}o|g:nO!͢}/_|/W!")2*@*|:n}ڢʹ³ʚʹÚɯ2*:jgG"B#!Ú#͋Ͳ*r+s#n)rúa!oG:jG:> 9ͨͤ!^:jb:N<+ͫ=6͙ʹ:jb:N 9ʹ!9">2b2Ӗ*B}š>>>w͓͘6͘ĔW < * .Ĕ2K!"B::<:m*@wͺ:l`>w:W*4wʤx pxä͚ͩ9 ͪE>9*@ Ĕ ͪxEf͚>92 d͂ͥ͜ͺ~zʤ‚*:^ʗҏË+}Š*A#}o|g:>O͑* s#r#w!Z$Ó *@6 xd>2͂͜ɤϤj͈ͩw>=)2n:O:k 2nͺ '͌>2Qf>2N˧2N˧{FF2jWT2 rT tw#tw~ͩ ?]?ɯ2!"t)2:<2Í:j_!"t)ŧzڴ>9'f˟* ^#V##~G:nYx@Y++":N<͂:*v*!"t))2n"v* ~#f=|͋:iͲɯ2*r!"t){2^:<2^!:)n^#V!3~~w*rͺ:k2kÁ*r!"t:QG)2Ħ###>2OnĦ"##~@.ͳ޳:k 2kT3 w*t*vPY!"t)L2-##~w2-"v"t!"t)##~[++n[!~4!"t?mx2W~#+w#w+:Wʠwɯ2B2ͼ͜ͺ~2_ҝ Nͺ:_wkFw<흱~6͓d *@ե ~mͬƜ dե ͗Ĕͤm-d_++V*@ Ĕ! Ns++r!ʀ>>Fw͗ ʤ~Gw#Ä*@ g|*@ͷ> Å? #x »*@~ wͪ͑͡Ɯ"Uͭ ZgƒͬƜ͡ dͥm:i6 d6ե~6&|mͬPYyR m*A{zuBKmA<yA!?"s#r*}"t^#V"*v^#Vs#r+*vs#r##Gnw#Ĕw#w>2y>2٥2!xĔ##+Z++R2o:>#~{_"p!,!,*t"v^#V}cj##n~Oex=hH#ͺh++"v/<[++"t^#V*v"ts#r*0*@w# Ĕ 6#Ýj=Įè͚E=ĮGûҤ͘ Ĕ*z|:>O*x)!x:?&o  * ~) )33G# 8w ;#*@~w \d_m>2B*@p! ~* " ?rɰm͓*$Ÿ*"*">2>2:ͣ*U~w Zm͍2iͲ͡ d6x¨:i*@ͷͥG:<ʁ2=2Pxm# :X/:̈m2O:2BG?͋Ƙ>G9xm~m:m2gx!|O~q#r*Uʓ#@:TO~̋2X~:m2Xy?x  =M*x$*"x*"zN:@/GyOʖA +' :Yx0o&:>W>OE:@ͺN/*@"U>2O!TqTƘ$!wg͘ͽ@?wĢ:?*@w͚Ÿ*4~E=Į>Å#FxɣT]## #~ ȷʻ ʻ * # ӣ <<úT ~<~*%MDͩ"%>2+G=O*@~2m~w#~w>`M>2l–~^~p2W>2*@~=2Rʅ:Z2[~2#{ڋs+p+qm>2Bl +!!q#p#w!Z~sĢ2Z>2KĢ2K:Z!n*#Ϳ_ΔN}*%Ϳ2+*#MDͩ"#!H~>͜9͜͢}2Bb}bN! ~态O>G~G!~G~o>Ͳr#r#r dʖ+_y#x?a'Ϳʙ*'L"'2ͫ^DM*:6# x¡*4w*E*:s#r$*.6#6Ƙ͘ͽ>ƙ> >p&0ƙ ~*4w:O9<_W`iDM*: ~w :YCNI N#FyX*A}|#0*A#$Ƙ͘:ͽn*@͙OÓ͙F!,Ü! N#F$##>w#w;ͭ> 9!~#9͜"a*@ :Y:SʮsöO s#rkW:Q==y==* Ww#Ҡ͙*g"a͝O*a:?G#2a͓2Q>2N:m>…:l@>…*@ͳӖ:`::B>2Xeh˟bkO:jGͫyü<¸џ?2SʂO C? rͳ!B4ʕ6> 9>2 )ã:ZO!͢yoxg*!:ZO}!!N#Fͩ"!*C#*.s#rI ~ͼD* :w |g}o* # !k~###ƻ*@ ####Gͬ//wɯ2ͬ4:l`c*@w2V•:kʕǥ2?O:`!aw*@~zWw# ˜zͺ#~*@!*@ *@–!ʖ~2`~2\ͺ:@2]ʖ:QO:`w:\*2s#r#pyOxG*L0MD!!>N:` "G>O:] 90*@; :YRn& ^#VOC"a*a}:>O*a͑"a2c"g:?'>2N2Ӗ:`!\ڭџ‹:`7:B7Xe¿џ‹7k͝F:l˟:ͳ!B4> 96–~2\2<w>j͢:B<>w##4~?SxǥdC:N2Qͳ>o+"*"!xĔ!F*@! "@Tm"@: r#~?w#r# ֞0 ̀w2W2^ͺ~O  :Y~w~p4ͅͅp#p #  Fw XXw~: ~wä͢!B5!"* ??*}o|g͈!as#r#p*0N#F*2^#V#F*a:cO}|yʕ*<+ó*<͈}|y#ʕ*<*IDM*0s#rє*6!<Ĕ*A|!Y66:Z2n<*0w#w*2w#w#w!"!a^#V#F='Z=:+O*GPP*|ʀ:?_W:>O͑_zW{_zW )ÒͲ4#4#4ͭĔͲdͭè# ú w#Ŕ>2n:ZO|^#V#".##"0##"2###"4#"L!6tBdos Err On : Bad SectorSelectFile R/O>2BPP`."Btcx!|::K¼Ʊ T~{?"^#V!~!9w!{~2!"=6Kw+w!9~!9w#. -¾s!9*. Vc !9. ->0!9!a*li $$$ SUBDisk error during submit file read. $ Start up command: $*.^#V"!I9*^#V!>(<!D5 6!C5  ñf n F%I <V H <V KFCFﺷ  !F ɯGOVVV>2E>2K!\"Ll "bSd#>>2D>2C WxͶѹ ?ݶ KJ*L:EG>x@( Ͷ N ͞ N :E?ord ErrorFile Already ExistsIllegal ? in FCBOpen File Limit ExceededNo Room in System Lock ListBdos Function: File: `]fc?E!|! N(V ^ V^{"z"Rrs>>< N(~~w N(~~w!>2E>2K!N"Ll ST"V 8͎͎͎:(yϿ(yχ~ݾ www> >ί""fn}Ox東ȯո!+5 6!*5 ES@"B!;:)G>ո!+5 6!*5  > ñl>2+>2*~ ?ݶww:( >ί~ݾ>~w:(>~w2)G濰~wS2"4!-:)G ? ^#V",DM$#~2Z~2?#Ĕ!Tw!~2j#~Ñw2kߑ!ĔTw"@{2R!"B"""9"=!Ʊyi###QĔ* .~2#~2#^#V#^#V" T] s#rz=w+w!~6UT"r8HDB/'333333.;;33,;;#w/#6 'O O m.:;=,/[]<>a{j_я } }q?tE ͕ ͕fn^#Vͬqfnͬq  ~((Fp>~ 2(!!. F(Ͷ8 7ZZ7*ѷNV^ /̷(͜[Ƿ!/̷(ͼfn>"Է:!.:˷ݾ "ԷV^*ɷR($ = [ַ:˷co"ַ !>*Է>V^*̷R V^*ηR .R>" :ӷ(!N!^B F( Ͷ *ɷtu!̷w :˷w ! 8*Ƿtu:˷w2˷!?mݏ.ʑ'Õݏ#6—;ʫ'ïq/¾33ÿyy#q#p#w!!x/'#*6?ݏwݏ/я,T!`i^#V#~#foq/NyяwG:|xAяяȥ- :ʹ8>! N84! N#FFNF("ɷ"ŷfnN!*ɷ~  fnfnÂÕ$ÚÚشÐ +YÞϵÍkstzmÊï >Ȕr?:!9~G#~;Ox´#~:´>_A_!9N!9 6 *N#F! ~!9w*N#F! ~!9T]!9Kf !9w=  % KV+^s#rS!9! !96dK=v*~!9. -Ό>0!9!9w!9<=6v!9#9w 6P!92÷ } [>2x!~w#ë: <=!o>g~w++~#: 2F42 @>>w͓͘6͘ĔW < * .Ĕ2K!"B::<:m*@wͺ:l`>w:W*4wʤx pxä͚ͩ9 ͪE>9*@ Ĕ ͪxEf͚>92 d͂ͥ͜ͺ~zʤ‚*:^ʗҏË+}Š*A#}o|g:>O͑* s#r#w!Z$Ó *@6 xd>2͂͜ɤϤj͈ͩw>=)2n:O:k 2nͺ '͌>2Qf>2N˧2N˧{FF2jWT2 rT tw#tw~ͩ@} ͮ:} 4ë-x>2 N ͢u*;" |GWx_}_ |*> <2~ N ͢u} 4>xQ '͜!"N ͔<Ÿ|: !X ~>2 :ͮ^ !:Ͱ!W ~ R!T ~w!W 6P#6R#6L͐ !T ~w!W 6C#6O#6M͐: :< ͜: <* ~<G: * ~|!O Ͱ*{ |ʭ*{ {!G>OͰò!6 o t>* !{" !" !^#V##" *ͨ͹!~w:22@!~ 8ÜCOPYRIGHT (C) 1981, DIGITAL RESEARCH ! Altos MP/M II V2.10S0 Copyright (C) 1982, Digital Research$Init Tmpx * .s@M͜¶ >2 !~, #~2 #T]~#,  * ~g * ~#0O0O:\  9 :22 !"!N "͠"{ #|ʰ !n 6:h ª :N 2 >Xԫö ͷ *B| !N#F p+qx z !~# ^#V"B*Dr+s"D*B *B| ͷ !?~<'w` wͷ !>~<'w` w+~<'w$ w*;#"; Attach failed.$x!͖!͖*@ :!w!!~— 6 #  Ü # ˆ 6!ͷ ,W ͷ m yր%!  !F!QBK_!^#V*@##i`"!6i`"!66 @#r.+ͷ &ͷ  ͷ * |.f."g.f."g.;q#p.". "."*~2#!Ow# \ ͜*^#V"*|ʗ"^#V"p+q##ͷ s* .~2"* #ڬ~2N2:1*.4"*. -* DM*!q#p!5~G0! w!p*6#  G Gq#p*$"*!@"ͷ ò÷ (8*Jz!~Mz#~Xz!~#z#~z#~z"22^#VBO!Ð!"524µµ!*5! :4:4<Ôww* :ƀo6  @ 1i`"!6*D"!*L"!i`"D"L^#V{= ! s#rP BK% *!r+s*!! s#r! w!2 6#wi`"!66 6 ! ~w!*!9DM`iN#F#^#V!9T]####s#r# w#­  DM$! ~ !~ʖ +w++++~w+++++w+wb *@{¨ z¨ ##6Z !N! ~#fo   $ * 0 0 E f J o g DMWW@  Prg ld err$Cli abort$Abs TPA not free$Reloc seg not free$Bad PRL hdr rec$Blnk file type rqd$Queue full$Bad entry$Chain COM to PRL$Msg Qued $ (User 0)$xwa{_w# ð* +++" 6#q#p* |6#q#p##:w* 6#* s#r*{ {!G>逐* N#fi#OͰ#~0p#"\* "͠"{ #|* * Q ͫ*{ ||*6#6 #"!:"͠#|l* :ͰT* Rw#w#w:} G* * ~~w#yO#z* w#w#w#6:!< =#s @@ FW:O !# {# z 6+6BWHW.,o-W6 .,-WK *Ds#r+"D###6#^#Vr+s####~w*! q#p#s#r÷ 6 6yO! ~w*@!~! *@!~!OO ~# ~ ~+ s#r>=*a ~ɮ[ Kx$]  a k p u   &oDM o g}U|U~#~7#"!*B|!"!!B"!^#V"!+~#!ʮ*!!*!N#F+*!q#p+s#r*!!"!*! s#r*!~#*!+s#r*!"!*!^#VÇ@i. #Ò-  O-~’*@DM! ~!o|g~V#~Vr+s!O s#r!o N#F+xʈ{‹z‹ w# w*Ds#r+"D~#fod!^#Vz/! ~_#!~#~+͡~#p+q*D`is#r+"D!PYDM͡!~O#~G +w #w*D| }`i"D##6xG* {~!w*@DM>͵* `~* 6vO e~wyO[~v~`w* x2 x: <} [PYÜPYÜPYÜ ÜPYÜ0ÜYÜYÜÜÜ $_͜PY ÜPY Ü  @;ogogDM o g,###+++}|z {"!*@##6 *!"!"!:!`*!*!!9"!"!*@2*!*!*!Ò>2!*!*@"!DM####s#r1!+++~++^#V"@_!^#V*!`iBK! s#r*F*!s#r+"F!q#pqͤ4s*!$4*! ~4!_DM[*!DḾ͊!L^#V{Xz_!K+ ~#~ *!##6Â{*D*!s#r+"DPY@Â:!*! w*!DM͞*!DMͽÂ}F*F|1BKT@;͜:!.;s#r!!.w#=#^#V"!##^#V#!3~#^!>þxw8#s#r* .~ʒ2!"2"* ÷ 8*!1^#V"7#N#fi"9!"!"PA!W|#|+}_|W*7"5`*9|*59w# x*@~w<%=!O>G÷ ÷ !91424^#V:4MXProc n;@M]~#fo!N}| *Ds#r+"DPY*D|S^#V"D#6++@1*@ ~l!_DM*@ ^#V"!2!*@*Ø"!*!*!! ~+~! w#¿! w#wT]#s#r#T]s#r! N#F#~#fo+|bk s#r! w#w#w#w*J`is#r+"J *Jz>4!. N^#V*#-@s#r! ~###’!J}ʒ~‹#~+‹ w# w ^#Vo >! ^#Vz +w#wD  _ W g GL! ~Y+~Y!~#ʳ! ~*!N#F! = ~@En!   MP/M-80@#~! N#F!N#Fy#x#p+qG!~MG#~XG*@DM!q#p!N#F p+qBK͘!^#V{ʲ+w#w+{T]##s#r } o|g~#fo +|’! ~#~r+s͘*@##6!"!F _ W! ~+~!!~#¹ >!Û _ W g GL! ~†+~҆!~+! +~+++~t!N#F! =H wR# w! N#F!N#Fypxpp+q!N#Fp+qBK!^#V{+w#w } o|g~#fo +|³! N#F{zr+s*@##6!"!F _ W! ~+~@ OsjIdle  8MXDisk MXList D (!(l :@J! ~#fo!!^#V{z >:Gy;>Y!^#V>.r=nrw+w*Ds#r+"D##6q! ~<>:_!####>++ ##>w+~#~#~*@ :w ¶ >:_!####>+ =z:2!~W#U*!&)) ~#~#>w#~*@ :!w  >:_!#### ### ##>wb! ~_#!O~#~+͆ʭ~#»p+q*D`is#r+"D!oPYDM͆!o~O#~G +w #w*D| }`i"D##6*L! AAoCliQ G*C   $$ Tick   &!Clock Ad! push b; environment saved mvi c,brkf call bdos pop b! pop d! pop h; environment restored ret ; pchar: ;print a character push h! push d! push b; saved mvi c,typef mov e,a call bdos pop b! pop d! pop h; restored ret ; crlf: mvi a,cr call pchar mvi a,lf call pchar ret ; ; pnib: ;print nibble in reg a ani 0fh ;low 4 bits cpi 10 jnc p10 ; less than or equal to 9 adi '0' jmp prn ; ; greater or equal to 10 p10: adi 'A' - 10 prn: call pchar ret ; phex: ;prA?   v!ATTACH  h ATTACH  x!!!$$ $ >B!!!  ! $$ A$"HA @D$II"  @D H @@"I@HD @B$B$$$H$"H$"@H ! !"B$"DI "HA$I"I$$@B$H$$$H@$Aint hex char in reg a push psw rrc rrc rrc rrc call pnib ;print nibble pop psw call pnib ret ; prntmsg: ;print message ; d,e addresses message ending with "$" mvi c,printf ;print buffer function jmp bdos ; ret ; ; gnb: ;get next byte lda ibp cpi 80h jnz g0 ; read another buffer ; ; call diskr ora a ;zero value if read ok jz g0 ;for another byte ; end of data, return with carry set for eof stc ret ; g0: ;read the byte at buff+reg a mov e,a ;ls byte of buffA " I@I$I IB @@ @HI $H"B@ !!AHBH@@HH@B@!@@ @I!I @$ @I$H $$@DDD$D$ "$AB !$!$BBIUUUT@@ $ DD A@H$@!@$@ B! @$$$AD!D " @"!@ @ADB!@@ @@B@  A+er index mvi d,0 ;double precision index to de inr a ;index=index+1 sta ibp ;back to memory ; pointer is incremented ; save the current file address lxi h,buff dad d ; absolute character address is in hl mov a,m ; byte is in the accumulator ora a ;reset carry bit ret ; setup: ;set up file ; open the file for input xra a ;zero to accum sta fcb+32 ;clear current record ; ; open the file in R/O mode lxi h,fcb+6 mov a,m ori 80h mov m,a ;set f6' on lxi d,fcb mvi c,openf A;ND  @@I! @A @@@@  DHA$ $DDA@$@ @(@ @@@   DD "i 0fh ;check low 4 bits jnz nonum ; print line number call crlf ; ; check for break key call break ; accum lsb = 1 if A yW0δ{ < 7COPYRIGHT (C) 1981, DIGITAL RESEARCH @ SIMPIO LIBaSEQIO LIBRbcdSTACK LIB eDISKSTATPRLfDSTACK LIBPhijCOMPARE LIB kNCOMPARELIB lWHEN LIBmAcharacter ready rrc ;into carry jc purge ;don't print any more ; mov a,h call phex mov a,l call phex nonum: inx h ;to next line number mvi a,' ' call pchar mov a,b call phex jmp gloop ; purge: mvi c,cons call bdos finis: ; end of dump, return to ccp ; (note that a jmp to 0000h reboots) call crlf lhld oldsp sphl ; stack pointer contains ccp's stack location ret ;to the ccp ; ; ; subroutines ; break: ;check break key (actually any key will do) push h! push AAAAAAA!~ 8ÜCOPYRIGHT (C) 1982, DIGITAL RESEARCH ! Altos MP/M II V2.10S0 Copyright (C) 1982, Digital Research$Init Tmpx * .sAA #r.+ͷ &ͷ  ͷ * |.f."g.f."g.;q#p.". "."*~2#!Ow# \ ͜*^#V"*|ʗ"^#V"p+q##ͷ s* .~2"* #ڬ~2N2:1*.4"*. -* DM*!q#p!5~G0! w!p*6#  G Gq#p*$"*!@"ͷ ò÷ (8*Jz!~Mz#~Xz!~#z#~z#~z"22^#VBO!Ð!"524µµ!*5! :4:4<Ôww* :ƀo6  A BB  Prg ld err$Cli abort$Abs TPA not free$Reloc seg not free$Bad PRL hdr rec$Blnk file type rqd$Queue full$Bad entry$Chain COM to PRL$Msg Qued $ (User 0)$xwa{_w# ð* +++" 6#q#p* |6#q#p##:w* 6#* s#r*{ {!G>逐* N#fi#OͰ#~0p#"\* "͠"{ #|* * Q ͫ*{ ||*6#6 #"!:"͠#|l* :ͰT* Rw#w#w:} G* * ~~w#yO#z* w#w#w#6:!< =#sB FW:O !# {# z 6+6BWHW.,o-W6 .,-WK *Ds#r+"D###6#^#Vr+s####~w*! q#p#s#r÷ 6 6yO! ~w*@!~! *@!~!OO ~# ~ ~+ s#r>=*a ~ɮ[ Kx$]  a k p u   &oDM o g}U|U~#~7#"!*B|!"!!B"!^#V"!+~#!ʮ*!!*!N#F+*!q#p+s#r*!!"!*! s#r*!~#*!+s#r*!"!*!^#VÇB#r#O Ͱ!~#~:} g." ? s#r#:w* ~ʑ:N G: <@O: !O xf.~O#W:V ˆ:!ʎ:!4< =›" F* " " * ~!< =q#p++* r+s+6:~ W* " * * {z:ͮN ͢=5è* DM" ͮN ͢Gͻ¨{: ܶ2P* Ͱ* P: w*{ | ͻ* !~O!O s#rO! ~ž#~žr+s>2÷ } [>2x!~w#ë: <=!o>g~w++~#: 2F42 B;ogogDM o g,###+++}|z {"!*@##6 *!"!"!:!`*!*!!9"!"!*@2*!*!*!Ò>2!*!*@"!DM####s#r1!+++~++^#V"@_!^#V*!`iBK! s#r*F*!s#r+"F!q#pqͤ4s*!$4*! ~4!_DM[*!DḾ͊!L^#V{Xz_!K+ ~#~ *!##6Â{*D*!s#r+"DPY@Â:!*! w*!DM͞*!DMͽÂ}F*F|1BKTB} ͮ:} 4ë-x>2 N ͢u*;" |GWx_}_ |*> <2~ N ͢u} 4>xQ '͜!"N ͔<Ÿ|: !X ~>2 :ͮ^ !:Ͱ!W ~ R!T ~w!W 6P#6R#6L͐ !T ~w!W 6C#6O#6M͐: :< ͜: <* ~<G: * ~|!O Ͱ*{ |ʭ*{ {!G>OͰò!6 o t>* !{" !" !^#V##" *ͨ͹!~w:22BM]~#fo!N}| *Ds#r+"DPY*D|S^#V"D#6++@1*@ ~l!_DM*@ ^#V"!2!*@*Ø"!*!*!! ~+~! w#¿! w#wT]#s#r#T]s#r! N#F#~#fo+|bk s#r! w#w#w#w*J`is#r+"J *Jz>4!. N^#V*#-@s#r! ~###’!J}ʒ~‹#~+‹ w# w ^#Vo >! ^#Vz +w#wD  _ W g GL! ~Y+~Y!~#ʳ! ~*!N#F! = ~BM͜¶ >2 !~, #~2 #T]~#,  * ~g * ~#0O0O:\  9 :22 !"!N "͠"{ #|ʰ !n 6:h ª :N 2 >Xԫö ͷ *B| !N#F p+qx z !~# ^#V"B*Dr+s"D*B *B| ͷ !?~<'w` wͷ !>~<'w` w+~<'w$ w*;#"; Attach failed.$x!͖!͖*@ :!w!!~— 6 #  Ü # ˆ 6!ͷ ,W ͷ m yր%!  !F!QBK_!^#V*@##i`"!6i`"!66 B #~! N#F!N#Fy#x#p+qG!~MG#~XG*@DM!q#p!N#F p+qBK͘!^#V{ʲ+w#w+{T]##s#r } o|g~#fo +|’! ~#~r+s͘*@##6!"!F _ W! ~+~!!~#¹ >!Û _ W g GL! ~†+~҆!~+! +~+++~t!N#F! =H wR# w! N#F!N#Fypxpp+q!N#Fp+qBK!^#V{+w#w } o|g~#fo +|³! N#F{zr+s*@##6!"!F _ W! ~+~B1i`"!6*D"!*L"!i`"D"L^#V{= ! s#rP BK% *!r+s*!! s#r! w!2 6#wi`"!66 6 ! ~w!*!9DM`iN#F#^#V!9T]####s#r# w#­  DM$! ~ !~ʖ +w++++~w+++++w+wb *@{¨ z¨ ##6Z !N! ~#fo   $ * 0 0 E f J o g DMWW BBJ! ~#fo!!^#V{z >:Gy;>Y!^#V>.r=nrw+w*Ds#r+"D##6q! ~<>:_!####>++ ##>w+~#~#~*@ :w ¶ >:_!####>+ =z:2!~W#U*!&)) ~#~#>w#~*@ :!w  >:_!#### ### ##>wb! ~_#!O~#~+͆ʭ~#»p+q*D`is#r+"D!oPYDM͆!o~O#~G +w #w*D| }`i"D##6*L!BoCliQ G*C   $$ Tick   &!Clock Bi. #Ò-  O-~’*@DM! ~!o|g~V#~Vr+s!O s#r!o N#F+xʈ{‹z‹ w# w*Ds#r+"D~#fod!^#Vz/! ~_#!~#~+͡~#p+q*D`is#r+"D!PYDM͡!~O#~G +w #w*D| }`i"D##6xG* {~!w*@DM>͵* `~* 6vO e~wyO[~v~`w* x2 x: <} [PYÜPYÜPYÜ ÜPYÜ0ÜYÜYÜÜÜ $_͜PY ÜPY Ü  B?   v!ATTACH  h ATTACH  x!!!$$ $ >B!!!  ! $$ A$"HA @D$II"  @D H @@"I@HD @B$B$$$H$"H$"@H ! !"B$"DI "HA$I"I$$@B$H$$$H@$B;͜:!.;s#r!!.w#=#^#V"!##^#V#!3~#^!>þxw8#s#r* .~ʒ2!"2"* ÷ 8*!1^#V"7#N#fi"9!"!"PA!W|#|+}_|W*7"5`*9|*59w# x*@~w<%=!O>G÷ ÷ !91424^#V:4MXProc n;B " I@I$I IB @@ @HI $H"B@ !!AHBH@@HH@B@!@@ @I!I @$ @I$H $$@DDD$D$ "$AB !$!$BBIUUUT@@ $ DD A@H$@!@$@ B! @$$$AD!D " @"!@ @ADB!@@ @@B@  BEn!   MP/M-80B ;ND  @@I! @A @@@@  DHA$ $DDA@$@ @(@ @@@   DD "+s#r'.9& -(!96!96 ͻ"9997h)ʹ/W)*9DMF $ !"9  *9"=͕"*="9!BOsjIdle  8MXDisk MXList D (!(l : C C=6>!==)H!=.):==O! *9N 3)  :=<2=)*9"9:W)͘*8"9d9w7+s#rí(!94~ ڠ)6*9#"9*9{zڔ)!"9*9!=~2=xG:=2=G k)x{_ )#º)>ɯ`iq#z)COMPRLRSPSPROVLSYM!=q*9= :=w*9#"9!98*=*9DM\4!"9!=q:=!=2=:=<2=K*!=6*=M)!=6!=q*=M)*9#"9!=p+q*=}OL**=|OL*:9*:8ʊ*+*8"9:9Ҥ*L**9DM_*!=6L=!=**=&9 N!9 87/*H**=&9 N+!=4©*:8:8C203229204368616E6765206440 :1040C000656661756C74206C6F676963616C206EE6 :1040D000616D657320240D0A20332920436F6E73B0 :1040E0006F6C652062617564207261746520736510 :1040F00074757020240D0A203429205072696E7462 :10410000657220736574757020240D0A203529208E :1041100055706461746520736574757020240D0A90 :10412000203629204578697420240D0A202A2A2A5D :104130002A20494F204552524F5220545259204173 :104140004741494E202A2A2A20240D0A202A2A2AB9 :104150002057524F4E47204D504D205645525349FF :104160004F4E204E554D424552202C204CHH +p,!=q:=#+*9"=4+*=&9) ^#V"==97F+29@6=97Z+L*F+*=&:) N#F3*=&9) >8ҕ+:=+*9DMͨ+Õ+ͨ+897ҧ+*9"8!=p+q*="=*=&9) =l7+!=8+*=DM:4OL**="=Ҵ+:9=O!9 N!9 !9 l7*87"=L**=DM_*L*:8B,_*L**8DM_*U,*8DM_*L*_*!=6>!=o,L*!=4Z,*8"9:9Ҍ, - - -!=6:9=!=,*=&9 ~2=,*=&9) 97, -î,:,v-,7-!=4‘,*8*=9 8, -,:= CbF52204458 :1041700049534B20444F4553204E4F5420434F4EFC :104180005441494E20424F4F54205245434F5244D0 :1041900053202A2A2A20240D0A54525920414E4FD6 :1041A00054484552204449534B20240D0A5570640D :1041B0006174696E6720626F6F74736563746F7288 :1041C00073206F6E2068617264206F7220666C6F5E :1041D000707079206465766963653F2C2052657044 :1041E0006C79207769746820224822206F7220221F :1041F000462220240D0A496E736572742064697327 :104200006B6574746520746F2062652075706461DD :1042100074656420616E64207265706C79207769C2 :10422C- -,!=q*=M**9#"9=971- -- -*=&9) ^#V"9>9 8u-ͅ*=&9) {7"=-͚"9H-*=&b;) N#F*; ~Ҷ-*; DM4*; *;##N#Fq#p-*;##q#p2=:=.*=&9) {7"="8:=O>-"8-2=->9͎7>7".) .=*9DM\4\4:8ZA.. \v9 -I.:e y..*8&ͺ7) DMe -q.:8ʇ.:82\\͠4:8 ¥.. 8\ -.!"9}2=2=v* .:8Z.. \v9 -..e) -.:8.:82\\͠4!"9}2=C 0007468206472697665206C657474657220A8 :104230007768656E20726561647920240D0A4D509F :104240004D20626F6F74736563746F727320757045 :10425000646174656420240D0A2030202020444FBE :10426000204E4F54204348414E474520424155443B :10427000205241544520240D0A2031202020313184 :1042800030204241554420240D0A20322020203382 :104290003030204241554420240D0A203320202074 :1042A000363030204241554420240D0A203420204D :1042B00031323030204241554420240D0A2035202F :1042C0002032343030204241554420240D0A20361B :1042D00020203438303020Chͻ"9997Ҍ/͙/͕H{/DM/ )!=6H!=[/:==O! *9N):=<2=3/:=<2=v/ ) ){/ )d9w7+s#r/ ) ) .!=q> !=ڳ/:=0O)þ/:= AO)!=q:=O͚/:=O͚/!=p+q*=|OͿ/*=}OͿ/*=!͛7"=*=!͛7!=s:h.0:=2h\5.0\5͒4*=!͛7!|s*87"=. \8 -S0:8m0*="=\4/TB\4!=s*=!͛7TB "8*8*8s#r/TB*=&ͺ7DM\4:j2j\4:80*8͇7"8:AZ081>0C 4241554420240D0A201B :1042E00037202039363030204241554420240D0AF1 :1042F00053656C65637420626175642072617465D6 :104300002066726F6D20666F6C6C6F77696E6720C8 :104310006C69737420666F7220636F6E736F6C6567 :10432000202320242020616E6420636F6E736F6CE5 :1043300065202320240D0A204D504D20322E303090 :10434000533520737570706F7274732074776F209B :104350007072696E746572732C206F6E6520706167 :1043600072616C6C656C20616E64206F6E65207389 :10437000657269616C20240D0A20446F20796F7585 :104380002068617665206120706172616C6C656C!:10400000C30500DB08E603C9C334400600C33140E2 :10401000C337402103EEC34F40C31940C31C40C304 :104020001F40C32240C32540C32840C32B40C32E9A :1040300040C33140C33440C33740C33A40C33D401E :10404000C34040C34340C34640C34940C34C4011F2 :10405000194006367E12231305C25440C9000D0ACA :10406000204D504D20322E31207365747570206DB7 :10407000656E752C2073656C6563742066756E6360 :1040800074696F6E206279206E756D62657220248E :104090000D0A20312920436F707920626F6F74669A :1040A000696C6520746F2068617264206469736B49 :1040B00020240D0A CC-C7B :10439000207072696E7465722C207265706C792061 :1043A0007769746820225922206F7220224E2220C1 :1043B000240D0A205072696E7465727320617265F3 :1043C000206E756D626572656420617320302C31DA :1043D00020240D0A2053706563696679206E756D1F :1043E00062657220666F7220746865207061726108 :1043F0006C6C656C207072696E74657220240D0A95 :1044000053656C656374207072696E7465722062A6 :10441000617564207261746520666F7220746865CE :104420002073657269616C207072696E74657220A8 :1044300023202428417578696C6C61727920706F33 :10444000727C77713A9E :104720008A77FE00C23047CD5A46328B77C3364770 :10473000CD6446328B773A8B77C9218D77702B7198 :104740002A9A4F260001685009E52A8C77C1092270 :10475000A84F1133001922A54FEB010017CD514E80 :10476000EB2AA84F1922AA4F2323EBCD514EEB2A57 :10477000A84F1922AC4F2323EBCD514EEB2AA84F63 :104780001922AE4F01040009EB010017CD514EEB89 :104790002AA84F1922B04F010A002AAA4F09EB019B :1047A0000017CD514EEB2AA84F1922B24FC921FC58 :1047B000FF229C4F2A9C4F444DCD084021000022EF :1047C0009E4F3E3C219E4FCD594EDA07482A9E4FC0 :1047D0C42920240D0A424F4F5446494C45208E :10445000434F5049454420544F2048415244204442 :1044600049534B20240D0A417661696C61626C6589 :10447000206E616D657320617265206C6574746572 :10448000727320224122207468726F75676820223F :104490005022202C205265706C7920776974682036 :1044A000617070726F707269617465206C6574748C :1044B00065722024464C4F5050592020202420441F :1044C00045564943452023202448415244444953FA :1044D0004B20242044455649434520232024203D99 :1044E0002020240D0A496C6C6567616C206E616D3B :1044F000652C2072657472792024C000444DCD10402AA54F444DCD3A400E01CD59 :1047E0001B47329B4F3A9B4FFE00CAF047CDFE4617 :1047F0001180002AA54F1922A54F1101002A9E4FB2 :1048000019229E4FD2C247C921685022A54F2100CC :1048100000229C4F3E01219C4FCD594EDA7F482A01 :104820009C4F444DCD0840210100229E4F3E242143 :104830009E4FCD594EDA72482AA54F444DCD3A408D :104840002A9E4F444DCD10400E01CD1B47329B4F49 :104850003A9B4FFE00CA5B48CDFE461180002AA558 :104860004F1922A54F1101002A9E4F19229E4FD2A7 :104870002D481101002A9C4F19229C4FD21448C97F :1048800021685022A54F210Cz0D0A5649525435 :1045000055414C204449534B204E414D45202020DD :10451000203D20202420414C544F53204D504D200D :10452000322E303053302053595354454D2053458B :104530005455502050524F4752414D2056312E3045 :1045400020240D0A204E756D626572206F66206C06 :104550006F676963616C2064657669636573206168 :104560007661696C61626C65206F6E207468697336 :104570002073797374656D2069732024312D4F3158 :104580002D4FCD1340CD3B4632994FCD574DCDC722 :1045900046CD8046D63132984F3A984FFE06D2E645 :1045A000452A984F4D060021DA4509095E2356EB4E :C000229C4F3E01219C0F :104890004FCD594EDAF7482A9C4F444DCD08402160 :1048A0000100229E4F3E24219E4FCD594EDAEA4808 :1048B0002A9E4F444DCD10402AA54F444DCD3A403D :1048C0000E00CD1B47329B4F3A9B4FFE00CAD34888 :1048D000CDFE461180002AA54F1922A54F110100D7 :1048E0002A9E4F19229E4FD2A5481101002A9C4FA3 :1048F00019229C4FD28C48C921685022A54F21FC17 :10490000FF229C4F2A9C4F444DCD0840210000229D :104910009E4F3E3C219E4FCD594EDA57492A9E4F1D :10492000444DCD10402AA54F444DCD3A400E00CD08 :104930001B47329B4F3A9B4FFE00CA4049CDFE46C1045B000E9CD264CC3E645CDD64DC3E645CD444BAB :1045C000C3E645CDA34BC3E645CD5849C3E64511E7 :1045D00000000E00CD0040C3E645B145B745BD45DE :1045E000C345C945CF45C38E45FB76217977702BEE :1045F000712A7877EB0E0FCD0040C9217B77702BA5 :10460000712A7A77EB0E10CD0040C9217D77702B8F :10461000712A7C77EB0E14CD0040C9217F77702B77 :10462000712A7E77EB0E15CD0040C9218177702B62 :10463000712A8077EB0E1ACD0040C91100000E19C7 :10464000CD00403282773A8277C9218377712A83FD :10465000772600EB0E0ECD0040C9CD3D4032847769 :104660003A8477C90C 73 :104940001180002AA54F1922A54F1101002A9E4F60 :1049500019229E4FD21249C9219A4F360001AB410C :10496000CDAC46CDBC46CD8046329277CDBC463AE2 :104970009277FE46CA82493A9277FE48CA8249C374 :104980005D493A9277FE46C29E4901F441CDAC465C :10499000CDBC46CD8046D64132A24FC3A34921A209 :1049A0004F36012AA24F4DCD0B403A9277FE48C2B6 :1049B000BD49219A4F3618CDF848C3C049CD80482B :1049C000CDBC462A9A4F260001685009117B001978 :1049D00022A54F7EFE4DCADC49CD08472AA54F23AC :1049E00022A54F7EFE15CAEC49CD08472AA54F23C4 :1049F0002322C!E01CD40403285773A8577C9C3 :10467000218677712A86772600EB0E02CD0040C98D :104680001100000E01CD00403287773A8777D6615E :104690009F2FF53E7A218777969F2FC148A11FD281 :1046A000A8463A8777E6DFC93A8777C921897770C4 :1046B0002B712A8877EB0E09CD0040C90E0DCD7005 :1046C000460E0ACD7046C9CDBC46015E40CDAC4613 :1046D000CDBC46019040CDAC4601B240CDAC4601C8 :1046E000D640CDAC4601F540CDAC46010A41CDAC3B :1046F00046011E41CDAC46CDBC46CDBC46C9012AC3 :1047000041CDAC46C37F45C9014A41CDAC46CDBC85 :1047100046019741CDAC46C37F45C9218A DDA54F3A4F4FFE00CA124A2A4F4F2694 :104A00000001B64F2909E52AA54FE34E2346E1717F :104A100023703A9A4FFE00CA234A010017CD3A4745 :104A2000C3294A018016CD3A473A3E4FFEFFC245A0 :104A30004A2AB24F3E02B6773A494FD630010300B8 :104A40002AB24F09773A424FFE00CA554A2AB24F5E :104A50003A424FB6773A504FFE00CA774A2A504F33 :104A6000260001B64F2909010400E52AB24F09E3E7 :104A70004E2346E17123703A474FFE00CA994A2AF5 :104A8000474F260001B64F2909010800E52AB24F19 :104A900009E34E2346E17123703A424FFE00CAB843 :104AA0004A2E10010C00E52AB24F0D04F360021A74F36003E0321A74FBEDAA6BB :104D90004D2AA74F2600014F4F0936003AA74F3C36 :104DA00032A74FC2884D21A74F36003E0F21A74F93 :104DB000BEDAC94D2AA74F2600012E4F0936FF3A09 :104DC000A74F3C32A74FC2AB4DCDBC46011545CDD8 :104DD000AC46CDBC46C9CDBC46CDBC46CD03403269 :104DE0004E4F2A4E4F4D060021264E09095E23568E :104DF000EBE921404F3601212D4F3603C32E4E21C2 :104E0000404F3602212D4F3603C32E4E21404F36E0 :104E100001212D4F3602C32E4E21404F3602212D47 :104E20004F3602C32E4EF24DFF4D0C4E194E214E01 :104E30004F3600014245CDACD9EB012E4FE10E :104AB0000A1203132DC2B04A21685022A54F2AA220 :104AC0004F4DCD0B403A9277FE48CAD34ACD0848A5 :104AD000C3D64ACDAE472A994F4DCD0B40CDBC46EB :104AE000013C42CDAC46CDBC46C37F45C9CDBC469A :104AF000015742CDAC46017742CDAC46018842CD4C :104B0000AC46019942CDAC4601AA42CDAC4601BBB0 :104B100042CDAC4601CC42CDAC4601DD42CDAC46E7 :104B2000CDBC46CD80463293773E2F219377969F1A :104B3000F57ED6389FC148A11FD2404B3A9377C922 :104B4000C3ED4AC921957736003E01219577BEDA3B :104B5000A24BCDBC4601EE42CDAC463A9577C6316C :1D#463A2D4FC6304FCDDE :104E40007046CDBC46CDBC46CD4C4CC969604E23A6 :104E5000461A916F131A9867C95F16007B965F7A9E :054E6000239E57EBC981 :014F3E000072 :044F4300 6A :104F5300 4E :104F63 00FA000018FA01001819 :084F7300%FD01001820 :104F8000000104110002041100020811D9 :084F9000040005000000080008 :054FA0009E4F01A24F2D :104FB6000000078D0734071A070D4734471A470DB7 :104FC600004D504D48444C4452434F4D00 A4 :104FD600De04B60004FCD70463A9577FE01C27B4B012443CD71 :104B7000AC463A9577C6324FCD7046CDED4A329469 :104B8000773A9477FE30CA984B3A9477D6302A9584 :104B9000772600014F4F09773A95773C329577C2D7 :104BA000494BC9214E4F3600013543CDAC46CDBCF3 :104BB00046CDBC46017743CDAC46CDBC46CD804604 :104BC000324E4F3A4E4FFE59C2EB4B213E4F36FF0D :104BD000CDBC4601B143CDAC46CDBC4601D243CDA0 :104BE000AC46CDBC46CD804632494F01FE43CDACEC :104BF0004621967736003A9677C6314FCD704601FA :104C00003344CDAC46CDBC46CDED4A3297773A978A :104C100077FE30CA25D~X0000CB :014FE60000CA :00457C013E 0D4734471A470D86 :104FF700004D504D48444C4452434F4D00 73 :105007 000+*9DMͨ+Õ+ͨ+897ҧ+*9"8!=p+q*="=*=&9) =l7+!=8+*=DM:4OL**="=Ҵ+:9=O!9 N!9 !9 l7*87"=L**=DM_*L*:8B,_*L**8DM_*U,*8DM_*L*_*!=6>!=o,L*!=4Z,*8"9:9Ҍ, - - -!=6:9=!=,*=&9 ~2=,*=&9) 97, -î,:,v-,7-!=4‘,*8*=9 8, -,:= D4C3A9777D6302A9677260009 :104C200001474F0977C921030122A54F2198773603 :104C3000012A98774DCD0B40CDAE47014544CDAC10 :104C400046CDBC462A994F4DCD0B40C9CDBC46013F :104C50006544CDAC46CDBC463A404F329B77219A55 :104C60007736003A2D4F3D219A77BEDA2F4D219DA0 :104C7000773600CDBC463E00219B77BED29E4C01CC :104C8000B444CDAC4601BE44CDAC463A9A77C63169 :104C90004FCD70463A9B773D329B77C3BC4C01C9E0 :104CA00044CDAC4601D344CDAC4621404F3A9A772F :104CB00096C6314FCD7046219D7736FF01DE44CD3B :104CC000AC46CD8046329C773A9C77D6419D - -,!=q*=M**9#"9=971- -- -*=&9) ^#V"9>9 8u-ͅ*=&9) {7"=-͚"9H-*=&b;) N#F*; ~Ҷ-*; DM4*; *;##N#Fq#p-*;##q#p2=:=.*=&9) {7"="8:=O>-"8-2=->9͎7>7".) .=*9DM\4\4:8ZA.. \v9 -I.:e y..*8&ͺ7) DMe -q.:8ʇ.:82\\͠4:8 ¥.. 8\ -.!"9}2=2=v* .:8Z.. \v9 -..e) -.:8.:82\\͠4!"9}2=D}FF53EE4 :104CD00050219C77969FC148B11FD2E64C01E34416 :104CE000CDAC46C3584C3A9D77D6FFD6019FF53AD6 :104CF000404FD601D6019FC148A11FD2154D3A9A07 :104D0000773CF53A9C77D6414F0600212E4F09C1DA :104D10004871C3254D3A9C77D6414F0600212E4F4E :104D2000093A9A77773A9A773C329A77C2634C215C :104D3000424F360401FA44CDAC46CD8046329C77D2 :104D4000CDBC463A9C77D6414F0600212E4F0936FE :104D50000421424F3604C9212D4F3600213F4F36E2 :104D60000023360023360023360021494F36002128 :104D70004E4F360021474F3600213E4F3600214826 :104D800 D"Dhͻ"9997Ҍ/͙/͕H{/DM/ )!=6H!=[/:==O! *9N):=<2=3/:=<2=v/ ) ){/ )d9w7+s#r/ ) ) .!=q> !=ڳ/:=0O)þ/:= AO)!=q:=O͚/:=O͚/!=p+q*=|OͿ/*=}OͿ/*=!͛7"=*=!͛7!=s:h.0:=2h\5.0\5͒4*=!͛7!|s*87"=. \8 -S0:8m0*="=\4/TB\4!=s*=!͛7TB "8*8*8s#r/TB*=&ͺ7DM\4:j2j\4:80*8͇7"8:AZ081>0D=}MMORY OVERFLOW, USE [A] SWITCH$INSUFFICIENT MEMORY$OVERLAPPING SEGMENTS$ $TEMPXIOS OB6XIOS2H  .Pïï3?FPBNX PBXXABS $$$  PFXXPROG $$$ PfXXDATA $$$ P~XXCOMM $$$ 9-:\::YYABS $$$ YYPROG $$$D181>0!=q.*= :=w*= ~!=q*= :=w*= *= ^#VN#F) *= 6*=^#V!͛7"=͝7!=s&1!=ʮ1*= DM4*=M/1*= DM5®15@6*=!͛7M1*=  *= 71*=  *= N#Fq#p *= ~ 2*= DM͠4 *= 6b1*= N#F*= *= N#F4?1!=p+q*= N#F*=͝7ͼ7*=q#p*=*= l7+*=##q#p*=*= N#F^#V͝7*= s#r *= N#F`i"=*= N#F `i"=*="===72*=+*= ^#Vͺ7DM52ͽ1*="=Һ2*= ^#V*=ͺ7DMD? YYDATA $$$ YYCOMM $$$ ::;:;   ,!ï>s T*T>HCԅÁjfvR}Ђʅ|ʃ`~w+$0ڀH<灔j"7_kʄք H`\ 0<.^ 889  WU!UINDEX ERRD-52*=  *= 73b1*= N#F*= *= N#F4!=s+p+q*==7s3 *= ~e3ͽ1*=DM5233*=##=73 *= ~ґ3ͽ1*=DM52:=3*=  *= N#FPY83͔2333*=  *= 73?133!=p+q*="=!=s+p+q*=DMB3*= ^#V"=*= N#F*=͝7*=:=w *= 6!=p+q*=DMB3*= ^#V"=*= N#F*=͝7*=~   ĉ4{>.̉4s4OͲp45@6646<5@645<>45<5͒45<5@6! w #4>4>25"5"5DOR$MULTIPLE DEFINITION: $MAIN MODULE ERROR$FIRST COMMON NOT LARGEST$COMMON ERROR$UNRECOGNIZED ITEM $徃*+O| -:PF -:0V2 08D9 ALV3 097D ALV4 0AA1 BSCEND 0A21 BSCTBL 0AA1 BUFF1 0FBB CON00 101D CON01 107F CON02 0853 CSV1 0896 CSV2 08D9 CSV3 097D CSV4 159B DIRBUF 1447 LDB100 1475 LDB101 14B7 LDB510 14F5 LDB511 13FF MPT 1215 PAT 1421 PDB000 0F49 SIOPT1 0AA1 SYSIN2 0853 SYSIN3 0D78 ATNINT 0F95 CENPTR 12AC INTXR 1D_yo`"5!"555@6*5|v5 "5*5MD*6*5DM:5I565@6b56b5*5|v55*5͒4*5"5*5#"55*6*5?\ABORTED$NO SPACE$NO FILE: $CANNOT CLOSE$DISK READ ERROR: $DISK WRITE ERROR$YYYP   YP*6YPYPYPYPYPYP Ͳ ò!=6#65"=*=|‚6>8 8"=##*= ~6!=6â6*=|6!=616"=â6!=6:=ҷ6!=6#6#66*=~2=*= ~2=:=6:=2=*= ~2=!=6>!=7*=&= ~/*=D 29A INTXSI 11EE PTXDOS 0D04 REDINT 0CA4 WRTINT 10EA PDISP 1155 SELBNK 10E7 SWTSYS 10E4 SWTUSR 10F0 SYSDAT 120F PTLB 0000 BSCTB1 15CC EXIT "158B BPBPL 1575 BPT 017E DIVIDE 1567 DMABPB4@1@7@!O@@@@"@%@(@+@.@1@4@7@:@=@@@C@F@I@L@@6~#T@ MPM 2.1 setup menu, select function by number $ 1) Copy bootfile to hard disk $ 2) Change default logical nam.es $ 3) Console baud rate setup $ 4) PrintD0&9 w!=4697"9 *9"= *9"9*G9M *H9M *I9M *=M *=M *=M *="9i`N#Fog_og_{ozg_ogDM!>))덑o|gҴ7 =¢7DM!>))7 =7_{ozg^#V) 7^#V|g}o 7_{ozgi`N!#Fogo&og_{_z#W6\ *F*6'QFU LINK 1.3 $?MEMRY$MEMRYXTEMPXIOSSPR?ME E/!w~8H@K:wJ!w6>!wڢKͼFBͬF:w1OpF:w{K$CͬF:w2OpFJ2w:w0ʘK:w0*w&OO w:w<2wIK!NO65CͬFͼFͼFwCͬFͼF̀F2NO:NOYK!>O6ͼFCͬFͼFCͬFͼF̀F2IOCͬF!w6:w1OpF3DͬFͼFJ2w:w0%L:w0*w&GO w!"O!w6*wM @ͮGEDͬFͼF*OM @ͼFeDͬFͼF:@O2w!w6:-O=!w/M!w6ͼF>!wҞLDͬFDͬF:w1OpF:w=2wüLDͬFDͬF!@O:w1OpF!w6DͬF̀F2w:wA>P!wHLDͬFXL:w:@OHM:E! from following list for console # $ and console # $ MPM 2.00S5 supports two printers, one parallel and one serial $ Do you have a parallel printer, reply with "Y" or "N" $ Printers are numbered as 0,1 $ Specify number for the parallel printer $ Select printer baud rate for the serial printer # $(Auxillary port) $ BOOTFILE COPIED TO HARD DISK $ Available names are letters "A" through "P" , Reply with appropriate letter $FLOPPY $ DEVICE # $HARDDISK $ DEVICE # $ = $ Illegal name, retry $ VIRTE w<:wAO!.O Hq%M:wAO!.O :ww:w<2wcL!BO6DͬF̀F2wͼF:wAO!.O 6!BO6!-O6!?O6#6#6#6!IO6!NO6!GO6!>O6!HO6!O6>!OڦM*O&OO 6:O<2OˆM!O6>!OM*O&.O 6:O<2O«MͼFEͬFͼFͼFͼF@2NO*NOM!&N ^#V!@O6!-O6.N!@O6!-O6.N!@O6!-O6.N!@O6!-O6.NMM NN!NO6BEͬF:-O0OpFͼFͼFLLi`N#Fog_{_z#WG+GEGF2O:OYN@2O*OM!N ^#V!O6!O6N!O6!O6N!O6!O6N!O6!O6NNNNN!O6EG:O0OF+G+GLi`N#Fog_{_EUAL DISK NAME = $ ALTOS MPM 2.00S0 SYSTEM SETUP PROGRAM V1.0 $ Number of logical devices available on this system is $1-O1-O@;F2OWMF̀F12O:OE*OM!E ^#V&LEMEDKEͣKEXIE@EEEEEEEÎEv!ywp+q*xw@!{wp+q*zw@!}wp+q*|w@!wp+q*~w@!wp+q*w@@2w:w!wq*w&@=@2w:w@@2w:w!wq*w&@@2w:wa/>z!w/HҨF:w:w!wp+q*w @ pF pFͼF^@ͬFͼF@ͬF@ͬF@ͬF@ͬF AͬFAͬFͼFͼF*ESz#W, 0 F ^#V#! ))))o͂ $s#r#!46# ʈ, , 3OO4 G4GG MPMHDLDRCOM  :M?PCP!^^#V4 G4GG MPMHDLDRCOM y+"!91*:~!~6ʺ=G#^#V#~xé#"!N#F{*>7 *|+" :; EAͬFEJAͬFͼFAͬFE!wq:w0GZF2w6GdF2w:w!wp+q*O&hP *w "O3"OQN*O"O##QN*O"O##QN*O"O QN*O"O *O QN*O"O!"O*ODM@!"O>!OYNH*ODM@!"O>$!OYNrH*ODM:@*ODM@G2O:O[HF*O"O*O"O-H*O"OH!hP"O!"O>!OYNH*ODM@!"O>$!OYNH*ODM@*ODM:@G2O:OHF*O"O*O"OҥH*O"OҌH!hP"O!E E"O*ODM@!"O>OEJ*O>w:IO0*O w:BOUJ*O:BOw:POwJ*PO&O) *O N#Fq#p:GOʙJ*GO&O) *O N#Fq#p:BOʸJ. *O .O -°J!hP"O*OM @:wHJHJͮG*OM @ͼF