IMD 1.18: 17/11/2012 15:02:10 micromate cp/m plus source master  UDDp1!* ͍! %!͍! ͍! ʢ ͏ ͕ !!~# 4 ͕  ͍!:!g:!s :!_ g:!s !]~$o #~B̩ 1!ɷW|g ͏ ͕ %z ͍! ͍!  ͍!vCPM3 SYS CPMLDR error: failed to open CPM3.SYS $ CPMLDR error: failed to read CPM3.SYS $ CP/M V3.0 Loader Copyright (C) 1982, Digital Research $021182"(yڥ!2(2(:(2({2(!" #"(9"@"1"!N(y2!K!!!dڛ&_^#V*("""""""""""""((("""";(""""A(G(""""""""""""""""""""""":"ž" *y!(4 5~yµ"5 6y ’" ͒":("!( Oͻ""MD"2 #>" BDOS ERR: $Select$Perm.$""" #""#"v{_zW{_zW )8## ?# w#J#J*|^#V###"(##"(######"(!( I#*(!(I#*(|!(6ʕ#67**(w#w*(w#w#w!(^#V#Fͪ#'*O##*(&%!(s#r#p*(N#F*(^#V#F*(:(O}|y$*(%#+#*(.#}|y$#$*(%#*(DM"(**(s#r*(s#r#pyoxgk$DM*(0*MD"(!**(MD$*:(O&%!(N:( y$G>O:( ʐ$Ç$*(͒$ :(ʨ$n` ~#for$2(O͚$"(}:(O*(7#"(2("(:(O:(G2(!(w*( *($!$~2(~2($:(2($:(w:(w |g}o'% )4%:(O!3%yoxg:(O&%}*(:(o$$~w{ozg ^#V#:(ʏ%>(Û%͡%"(#ͳ#*(ç%*(r%"(!(~#O&%E:(%$N/*("(y2(ʹ%͗#ͻ%ͫ%ʛ&*(X%:(O~J&yʔ&x ʍ& ʂ&J&Í&N%J&# h&2 #G>G":&$~X%*( I#%Ow!&x&>Fwx2(2(~:(:(6:(&w2($~O %!'>w:&ͨ&$2("4%O.'5"&Ϳ&'$:(!(S'"&: #"ͮ$"$:((͛%#ͳ#%:(< #=!(wW*(M%_S# #-*(MD:%"(:(2(ɯ2('>G=O*(~~w#~2(~wc%$~'~p2(!"(>2(*(~=2('~2(͛'o'>*(w!"(2(=2(!"(Û%͛'o'͢'͢&'(ͫ%$~<7(w@ͩ'7':(""(Û%:(~(:(2(:(~(*(6:(p(w#:(w$:(w*@"* #}D>(%$*((*(T):(_2({2("(r%"([))?#,)d)>l)[)I#6:(<!=6)*(J)"(*(K*:(G/O*((*(#=#d)##(I#c*+++y*+++Ñ*Í*×*Ý*ã*ô*++é*Ã*++++ø+++ü+++++>22!*"*b"̓*(yӈۊ>!++i`"j,i`"l,i`"n,i`z n&>2s,!r,~Ӂ!s,:l,ˎ8(+2q,!r,:l,8ӂ>+:j,(Ӄwh+S+*n,:s,Ӏ͜+ۀO(G+!q,4~ (+*>ۀ:p,ӄ>fͧ+ۀ8S+W&N+|(ۀW(>Ӏ͜+ۃۀ>Ӏ͜+ۀɷ(Ӄ>Ӏ͜+ۀ8>ͧ+S+ S+>Ӏ͜+ۀG !r,6 x O{ !+ɯ+ +Y,,&,P ! LOADER y; !91""|0!~ʞz=_: _* ""*og*%|}D S#N#F:ʒ#4ʝ^#V{‚:¿*.~w*DM!&_*.& >k s#rr+6.""1*D`.45. F.~. ^#Vx>`. s#rz 6#N#fi%$g1:=<@v_}v=p{_3;{<g"T=X3*j ~P#~R#~L{gbk#N#Fk$&Zcx {~#o}o1!;!"Ï:= w*wWx ~#&*.~s*"ѷ\ Cannot load Program 221282 COPYR '82 DRI <bHA$@DH   A@!" $$@1-! j 1".~2.~2 :Xck*kͮ  b < .~=>$.w.6#w.6#w.61.~  .~~w@.p T~º>+~.~~! yͮ Ë.~~w2g !PROFILE.S !+2 !  +~d {   O! w+w+: =w! 5 c ʋ  :p  m>> ͧ  N Ĩ –.~+w.~2  9 : ! ~##~ !7 : !Կ : x*l " !ZXچ! 6  zz: 6 : %2p  ͆ : =̀ 2r  DIR TYPE ERASE RENAME DIRSYS USER u"Q}:\=p:r Aæ R ÂN ͙ʸ} !M 545 x ]  ̵ 6 : oG! ~怹>2M  xf>:ͦ ͤ ͍ ͤ f ¹2 lf   ͫR  L͞L I *  *  A }_Yl !ͮ ͒6 \&đ %* "l ͍  ûȷ45: w ? A I N   SUBMIT COM ! ͮ ! 6 #"l  !cͿ  O!:r :ͦ ͍ !~B I !pͰ ^#VCOM SUB PRL y!cͰ  î !" * %.2P#ͮ !g 4*l +"l ͷ 2 "Qx2Sl "Tx2V!q ~ :p ͆ .ڶ2* og$2| .w#w#w#w.~ .w#w~?w; ; ! ~#49 w#~$ A  < > _I  ! 6 ! ~#Ͱ 6 m   _  ! 6=  { *.pѯ:r x , \<=!Ͱ =ɯ2 \s 2 ! D ;! : .44 #4"l ~[* 2 a7 {7 w!Y #! *l "l " ~ U #D ]T!̷ 6*%.w#w!} 6 r 6 #w.6#6 #t#6.wo*.s#r.rͧ ̧ m . ^#V45+ w#w.f.5\A "l " l |F# !( | !( : x. +"l ! ͮ   ͮ ~!G8 * ~;#1 կA *l ~:g X #I ѯ*l  *l ~0څ :҅ q X x<Ü AX QX X ~@#~:k #^ *jT~# ® wy#ù ! 4 : !Ͱ ~@*h~ yw y/w*hw*h~I E> ͦ > æ % 0  < : ~ȹͦ #* A !g ~6*  * >? A *l " ~0: :: q "l x~0 xG#Gs : &͘ ͤ &ͦ %˜ >  Ʌo$>?· !  > # ͮ x> # ~ Enter User #: $No File$ required$ERASE $ (Y/N)? $ Press RETURN to Continue $ (User 0)$NON-SYSTEM FILE(S) EXIST$: $$$ SUBCPM3 SYS BDOS3 SPRM BNKBDOS3SPRjRESBDOS3SPRCPMLDR RELCCP IMGLDR SUBBIOS SUBGENCPM DATZ80 LIB/ !"CPM3 LIB #$PORTS LIB%&PMCEQU LIB/'()MODEBAUDLIB*SCB ASM+,SECTOR0 ASM-.LDRBIOS ASM:/012BNKBIOS3ASMP3456789:;<=>?DISKIO ASMS@ABCDECALLVERSASMFECHOVERSASMGDUMP ASM HIRANDOM ASMVJKLMNODIRLBL RSX PSUBMIT COM*QRSPIP COMDTUVWXMAC COM\YZ[\]^HEXCOM COM _RMAC COMj`abcdefLINK COM{ghijklmnCOPYSYS COMoGENCPM COM(pqrstuvwxyzSAVE COM{SID COM>|}~XREF COMyLIB COM8ED COMIHIST UTL TRACE UTL  8Copyright (C) 1982, Digital Research 61K TPA $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$Ӏ,ۀO(G  ۀO(GӒ x Ʌo$``$:ڹ(=ӒENTRNP AP AP AP AӜ>ӜCR2T:T ɯ2T::RU:S!U2(Ӓ=`TERMNLMODEM C**)> | x0 x( x>h&)))~ʣ~a > >wiͣ!!y>***)>2| x(0Vh&PN xی/0**)>| x0h&PN x(,i&)))~ 0=Gy(ە xGەӓ***)02(W| x(0yxͣ(l&PNyی0 yӌ!4>> &6!<' x=6 *#"#{MM>ӞӄMM1>22!"*">Q !>Qyy0:5.17=TiÊIÀÅrvÎÐÒzEÈxs1Ã1Oj$|Ãà à ÃBB+"}{_}o>2~77ø~7"9:OG#Q{ozg# ""!2*%DM**ѵ+)) H~#+}#<:<ʲ<77:<ʢ=2(*f*(}DɯQ"(>QKQKQ>Q"%Q!*$K*"x!*!@$@hK\K:K ~#~ w*NK*NK^#V#N#F!x>QGQx3ڰbڼqҼo5p5"""*!yb! ~G*!NKկ2}!,"**NK6 :+OK2$^#V#N#FxNp:$p:Gjxj Y# A>QFQKK{<<ʽ! ~6 69BK! OS$Nwy!"(9"f1f! Ҕ2! ~#foCOPYRIGHT (C) 1982, DIGITAL RESEARCH 151282y2i&) ~#fo{ !~2!~#fo͍i`"i`"itptx|xݾ|h lX)\8`GdVheltp@DHLPϽT`d P9THXW\u@DHLм߼"$)Q, Read, Write retry (Y/N) ? 7=BHNTY` RDY, WP, FLT, RNF, CRC, LD, DREQ, BSY,v*f޽ξۀW&N+|(ۀW(ɷ(!Ӄ>Ӏ,ۀ8>O{ >Ӏ,ۀG *6(  O _ !"$(SOʺκ_t2!v((A!4~ (͹:(*ͤ*͒:!'^#V#ܒ !̻͒Y(>>Ӟ> Ӟ>Ӟۀxӄ>fͨۀ8>Ӏ,N :滹8B! w.:滹8(! w,:G2(:G2  ˰`2:ӂ*>:滾(Ӄw͕*ع:>!  ! >!!w":ӹ!7"~Ӂ>7F:ֹ2:Թ2:ѹO!7~#foy˰O!O:廹8d! wPO!7y  Error on : T-, S-!  8K PMC-101 CP/M 3.0 with extended Bios for MicroMate -Vers3.0- """W=(!"=(!="=(!`"ەO 0<2y 0<2!""!@""! "!p|G^!p>yi y!͒12y9fhbzjl,ٷnp> rt1!2ѹ2ӹɯ~( O #!۹͒:ҹAO !͒*Թȶ!͒*ֹ>/<033O _ W{ =y2ҹi&) ~#fo{ !~2ӹ!~#fo͍i`"Թi`"ֹi`"ع:2ڹi`z n&*ҹ&)~#fo*ҹ&)~#fo~#foڗ>2#×:#<ֱ2#*=‡*":*}®:=::<>2*i^#V+ d!K*}@*)): K:) O "!w [O?WGzO:VxGyOGxwq*}}ʴ>2d:#ϳ>29೯2~2#!   )xð*}*}"*x"xm*^#V* s#r**s#r*:ﰾY4Y̓**~#ng* s#r ^#V랖a##)""xx!"""XC*~<β*":!:*}*"x"*"g*3:= :Oi :=H:Gi a6:G/O**W :T=ҍ aʚ~±6*:X)!:T>qkֱ!:6>X*{Q:_2{2Ē"͂"X~<±#cdfg!"()*N!r)!N!)z<*)"!":X*:w:w#:w*2*}D̓¡>2ͱԨߧ?~¾¾ʯƯ>w͙=2͜:wÚ~̓ʑpá!6NwͧBpͧȴÚgsr͐-͜ėͤS)_ͤ̓~?w͐s-?F͜pN͆p# Þ͐*6!¿?~p*6 >2ͱݨԨߧͷw*oq͋"@6ȴ͚Xͤ͋͗wO~<: g~w#w#6##)͋@ * g~?G++!o#~>T}! 6**#K"G*~ xr͐-xą@˥7(͚Sʀw :<RHͥ:>~c!o#~E^#V)G#~#~!~ b k##N#F#^#V#~#fo~o2{2g*wޛʪҢÞ+}*#}o|g:O*s#r#w!~w/~@w//Hͥ*e>=)_g:0"ök*w)*c)-͐ͤÀk*s":;:r2͚Θù͚Θ¥͚}/_|/*eW}_*c"e}o|g"c>2{—>2—͇ͱ* «>2͙wBp+ҫ:w͚AP{ 2W>O2ø͐R*e):r͚Θc2ZT͐-ڟ3͗@YsY̓YרYͅ:ߧAsҫ:@ҫ@ҫ$͚̓Aؘ=:<~?¯kê?~?ʾZT͐ڪ*>o"͒"!Ú:Oݜ"Ý͐6͚ ~2Asv@NN~v$̓W+vw̚v$̓rrͅ:rߧ>2+A@2r!Z2!"ög:2T͐-:ʹ>2<2ڟ!w: >2*6ݜݟO~<w:*)@ u:G*g`~!x_<_@*oy<:/G?~##~? 6K@?F6##N6⨯2p##q:#*~w>2*p@! ~*"v@*w# ) 6#̨͙N#FxT]## #~ ȷ  *4# ' 4! *~^ ^33G# Pv:dv6 y2@ !װ)#w*~"ҧ!Fw䧨ҧ̓ҧ:w̚":>嫯2̓*~wć"̀!~$6:03i"!~6*e>=)Q!QX@˥ >2 ˥!!q#p#w2wW*e_3ҫ-!s:!xQ*:<œ. ʩ.ʩAܕrr##sܕ<}rcN! ~态O>G~G!~G~o>_yG~.|°! w:ck[!x?[! ~ʤ͆[͗PPvqO-á=.:<ʰ! Vq##~_@wڰͶ:WMںʛ>úͶ >TJ:!ʷ͞x!Ǥw4 ϤPWޤPܕÂՕÂ*!!~~#~O~#FsO s#r:(„y==„*!^W*y^#Vx7=2wͼկw#KWK*"J T͞*:["+SX:ڜq:ʺ!ʵ>2ܕͤ2ѣO ̗DM͸}ޣ>r""2:2* :::29:>:>*ڈ>F6:_/G:ʧ:ڨ|OͤG:_O̗̗zW{¢|:*}|BKN¢ zyG:!vq:vՕvMڂ?Ͷ >T͓Â!">Â:G:O:h=27ryy/W!:l=:<>w##~2 4~?ɡ¹:<ɡɡüޟAX2rK:w++~=wv4͗O5:2X!"*>o+"! *!b"ݜ": r#~?w#>r# L=J Lv wȴbܕ?~O ͆ڡ†wŒ~è# # x ͗w ٠ڠ٠ڠw@ ~wb͐Úݚ!x>w~6:6~#+w#w+~;wɯ2KOFq-yl?Npg:ʓ~( ȴˆʀHÈ2xą ):@ΟO~#w͚ʀôb_++V@* )͗Os++r~Gw#* #~$%+@*9>  #>? ;*~ w-xąH"0 *ĊHEʀ@~›:6¦w͚̋ȴÇPY*{zBKNyʺ Nú2: *~w *" ݜ2>ʄ@~k:(s~*9~Ês~Ԩ~ͅ<G:<ޝ2x# W:<­:22G?>Grx~:2Ô##~*$*">2̀2kºʺ**iҺ@:O~흯2~WW:2Ôyʛ?ʔx ʔ |̷ǝÔN:r:/GyOOA +¬ ¢y2:x¹o&:W>OͫE:ڟ?N/*"y2ͦ>2 ݜwޛDM*w6# x *ow**ws#r̀*i6#6*}"w@*|<ď>!8>8> t>nͦv8 ~*ownT] KKͦޛ*w"wͦ"w@ :ÛNɛ N#Fy؛*}|h#ð*ͫ# 6RX*q6!"@**#":&2͒:È0:+Òy<_W`iͫDM*w ~bNpwޛDM*we ^#V#~2>â9͆>!"*y³*X*ÿ͂"*g*K!~<:wb##>w#wė> r!~#22Zw*q>ww:c *#*is#r*:!:)e:O!*c:Oͫ}@2æ ~á*g:o$*~K6?~wKw**i{#zir+s{O:w:Ғ4~:w?r##rp# ä |g}oì*g #G ¾1*q:*w***> r 2":O:G2!w*~zWw+ !z?#~*!* *G!O~2~m͗O~t>2?:2g͝DM*0MD"!*MD$:Oë!N: «G>O: —ù*ė :ڗn` ~#foͤ2O̗"}:O*"!s#r#p*kN#F*m^#V#F*:O}|y9*+"*}|yP#9**DM"*ks#r*ms#r#pyox*kw#w*mw#w#w>2'å2*OͶyڲò<*eͲ:0!::ò2*>*ͫ"4#4#4)7 #  w#*J|^#V#"i##"k##"m###"o#"q##"!s )*s!)*|!6~67rrorFile Exists? in Filenameòò>2a.":2:<:55;:2ɯ22{_zW{_zW )7CP/M Error On : Disk I/OInvalid DriveRead/Only FileRead/Only DiskPassword E)"!z<~rs^#V#N#FxN:oʲ̀õ(# Þry< <<%zrͷr6r9rMDÌ:o!6!h: ʚnt2 r62>rz<*9ʌ^: ~x ):*:őő>*(+"(w++2+2+ɍp؍!" >2+2*jx.#NzW::!2W!5=^x^z:m:*;#wO:͂^2¢ů͠Đ:!ڽ*(~ݎ׎5WèՐ؍j׎M2ͨxΐ*(+w"(j͌ !%"(^-:*$P:<\:W:2xM s:<9>2:*9x~+q’x2:**&~2+o#"&!+6Mŏ:W:2x ͺ*(+"(w  :܏>2*2:*(:+w"(ͺ:G::+̜2 5*(~o#"(Mš*(~`Uoj*(~#"(Ñ!*~6s!+6:+‚xoڊ{2Ó#w:2.+:.2-!%"(2*!“"&!*~4:2-Ԃ:Gͳͨ^2+>2:2*N#G2 2GH)+6:2,:!- ͌:,!͌+*(~L#Bxz:*:*(~ʓOr ͌ ͌! O(Ì*(~2**}ʷ!#¶!""÷:_:*(#w΍xH!“)6"&:!“ x5~y 5 6y(^͌@O:=7:͌y ͌:I ͌:=e: zz#͌͂:! ͌ G:Ҏ>xʝʝw>ɯw̩z:»!>wɯ:=zxzz::G:=/ͽx:Āy!4 šn!6@G:x: P:<: P n6 t6! ^6 t6u:)<͠^!Ó*"r*r"ÿ<:g:!͐*f}D! ~6t!rͷ֋O(^ƋƋƋ  :Function = File = !,!"h!9"f! ͉:2t™:!=Hgo:O*;*͂:A2=/::0! dگ61#d ڸïp#:w#6 !6:6 *#!)6.#)͂ O(BDOS > wM  2*7w#6?#7 .,:;[]=<>|!?]45#Ra{i_p# l s s l ls:¬MA ws  X*]w#6?#] .,:;[]=<>|!eʃ45#xa{ҏ_p# ’ ʙ ʙ:A2'!!"!9"1!>%:25:!=go:O*7*/*"*"[ <:g:!,*}D!~6 !S͌rOͨ͠bbb  :G:xͨ›:ͨ: !6 :<!G: >xw>ɯw% :7!>wɯ:= x :r:G:=Ľ9xr:y!4 5~y‰5 6y͌Ҡ^I@O:=ʯ:Iy I I:µ  #I:! I I I! O͠*}S~#!""Sz-*"##">2:2*N#G2H  W W|:<ʈ:W:H2xy“:z<*"!z<~s^#V#N#FxN:o ͠# CP/M Error On : $Disk I/O$Invalid Drive$Read/Only File$Read/Only Disk$File Exists$? in Filename$ÍÍ>2a."z:2:<:^^d{_zW{_zW ) 4#4#4 #  w#J|^#V#"##"##"###"#"##"! *!*|!6J67*w#w*w#w#w>2'q2*O͂yڍÍ<* p :0!:® :Í2*i "!s#r#p*N#F*^#V#F*:O}|y*Ͱ+*͹}|y #*Ͱ*DM"*s#r*s#r#pyoxg[ DM*0MD"!*MD$:Oi !N: i G>O: ʀ w *͂ :ʘ n` ~#fob 2O͊ "}:O*"2":O:G2!w*~zWw+ z #~*!* * ! ~2~+ -O~2 >2 :2 :w:P 4~:w r##rp# b |g}oj * # G | *ġ :*w**= ҵ * >  )ý :O!ͼ *:Oi } Á ~ |*:o$*~ 6 ~w w**{#z' r+s{ozg**|g= v ** ʄ ʏ  >22ͦ w*>ww: *#*s#r*  :!:G~# <*#~!d!ͼ ʷ !ͼ &!~6̀!"2*N q* * *}<6 ^#Vͳ>F D >!"**[ + "**K!z~<:w ##>w#w͂ × ̈́ > !~#! > > >N 4  ~*w::/GyO A +B 8y2:xOo&:W>Oi E:5 N/*"y2>2Í s͝ ͳ L2 ͤ ͔ *'  :O~Sy? x  - NG:<D2x™# 22zG?S͝ >Gx™~™:ʙ2 ##~[*$a*" ͋ʄ *!~Ê͙l͋ 6> - Ͷ ͙ÇPY*{zBK yʢ â< yº! > ~Gw#* #~$ + *!>  #>? #*~ w0" *y͐}0͋  Ͷ ͙^ 2͋ :@ʕ ~#w> ͙{͆ _++V * -Os++r!x>w~6:6~#+w#w+~wɯ2z ̈́ ʹOFqy3 Np͆ͯ:Z~MwS~¹o¹#¹ # ? -Ϳw ʠʡڠ¡w  ~w 2 > y &!"*>o+"!͗ *!"s͙" r#~?w#>r# =J̧ 4  wͶ ~O ʙ:z<>w##~2_4~?ʈ͆x:<ʈʈ{ͥ  2 :w++~=w4-Oҫ5:<4{͊ >2 :!3:z͞ Ͱ @ R _@ !">@ :G:O:=27)yy/W!:#?>F6:_/G:^:_|OfKyp!VuWy/2&:ʌͺR g[ |OE w @~@w>2 :>* ͊  :3:z͞ !>2Ob 2O ͊ DM͠}>""2:2* ::E sMO s#rͰ :(±y==±*!^W*=2wX կw#|W|*" j*:Œ"R :W>R  :!jx!w4 ͚̚͡@ *!!~~#~O~#G~.|! w:cʇ̈́ w!x?w! ~ʽw-llqOý.:z<! Vq##~_@w͡:z<¸. . r##s}̴̭N! ~态O>G~G!~G~o>_yW#x#W{s+p+q r#r#r͋S "͙>2z4 !!q#p#w2wW* _҆-!s:!f͐ *~wĦ ɯ2*#~2~w !"2=2*~2=22̀:*wͳ  6 6 *L͝ ͪ !~+6:0 ' "!~6*>=)X!f_CÀ*}<~*~{ͧ> N Ä:G*`~!x_<_*y <:/G ~##~?  @ F6##N6͆y2zp##q:!2!"R |:2 ͥ:N>2<2͡|!w:>2*6s͙ͤ|͔ ~<Œw:ҧ* ~§2& @t ͬ ͖ :z<ô~?̀ ~?  ͥ *>o"6 "!_ ʍ:OsÙ*"ͥcͬ͌ ôͬ͌ í  ͔ͥ͡ `-}͔ Pͬ yá>O2{&Óͥ:*:"R ̀**ͥq̀*"z::2ͬ͌ ͬ͌ ͬ(}/_|/*W}_*"}o|g">2{&&2{2|*͆ D<8+}7*#}o|g:O*s#r#w!~w~@w6Hq*>=)ү_|:0ʠ êͺ:<­ ‡Hq:>~c!o#~^#VG#~#~!##N#F#^#V#~#fo~o!o#~*ͥ&  && > ͋͹d- j 6Ͷ > ͙F b -w ~<: ͯ~w#w#6##- a * ͯ~?G++Np# |mͥZ ͆͂ b ͧb !B6NN!B!z<*"!"z:{*:w:w**z}D#cdfg!"()*:_2{2"+ "~̀~!:҈6>Ë2$-:$<~2$*1${NK"ɷ J>">2:N#=N>2!N2~2#! Œ t t)xu) O _"!w O?WGzO:xGyOõxwq*}<:<:*^#V=*"*DM**= ѵ+)) P ͞ g #+} ͔ ͳ >2*^#V+:<ʐ <' ͞ ' ~' *+"}{_}o= :<̝ ~' ") :OG#!K* N*))KKBI"B" $$@"UUUUUUUUUUUUUUUUUAHBI$"@!@HIA D"BB"$ "H BD!$ H$BD!!$D  D $"BHD! $ HHAII "!!!!B"D !B"I$$A"D$!!$H $$! H  BBD$A DBAHD$IH$ B!$$H!H"$! A$A "$B"D$$$@D DB!$@H@$$DD!$$I$DH"H$A@!@ !$ " $$ @DD! !$!$$A DD"@$BD"$"I$HBI !  $$D $@I$H" BH$DH@$ @A$ I"I$$DDH$I$ @ BD$DII !$$BD$$ @BB$H I $B IDI"@ !@$ A ! B$A@ $$ A$ $@" B"@ D! A$$D! I"!BI$ ! @"$I!$I$H H$I"I$I$BHDI $@@HHI$H"H $I$I$ B!I"" BDBA$@BB"$B@D! !  @@!!DD@@@I!@$"$ABD$$ogo&og_{_z#WBNKBIOS3SPRRESBDOS3SPRBNKBDOS3SPRCPM3 SYSGENCPM DAT . $."y2;!"(:2(=2(:=;!~;4#.{2(!" "9"2!;(y3]K!o\b!,_^#V* !J ^#V̀:#!"(COPYRIGHT (C) 1982, DIGITAL RESEARCH 151282/(  + 1 7 = }!!!!"""""# ####$$$$#$-$A$J$S$@Y$u u J$u u }$$$$$*%P%$%&'('d'''(('({ A g X J v !)$*^#V#^#Vw# ll l ls:¬MA wM  2*7w#6?#7 .,:;[]=<>|!?]45#Ra{i_p# l s s͂:(A2= / ::0! dگ61#d ڸïp#:w#6 !6:6 *#!)6.#)͂ O(BDOS Function = File = !,!"h!9"f! ͉:2(t™:! =Hgo:O*;*Ó*"r*r"ÿ<:g:!͐*f}D! ~6t!r ͷO(^  : šn!6@G:x: P:<: P n6 t6! ^6 t6u:)<͠^! G:Ҏ>xʝʝw>ɯw̩z:»!>wɯ:=zxzz: :G:=/ͽx:Āy!4 5~y 5 6y(^@O:=7:y :I :=e:  zz#͂:!  r  ! O(Ì*( ~2* *}ʷ!#¶!""÷:_:*( #wxH! )6"& :!  x2 GH)+6:2, :!-  :, !+*( ~L#Bxz:* : *( ~ʓOڊ{2Ó#w:2. +:. 2- !% "( 2* ! "& !* ~4:2- Ԃ: Gͳͨ^2+ >2:2 *N#G2  :+ ̜2 5*( ~o#"( M š*( ~`Uoj*( ~#"( Ñ!* ~6s!+ 6:+ ‚xoͳ*& ~2+ o#"& !+ 6M : W:2 x ͺ*( +"( w  : >2* 2 :*( : +w"( ͺ:G:  !% "( ^-:* $P:<\: W:2 xM s:<9>2 :* 9x~+q ’x2 :* ͂^2 ¢ů͠: !ڽ*( ~5WèjM 2 ͨx*( +w"( j>2+ 2* jx. #NzW:  : !2 W! 5= ^x^ z: m :* ;#wO: 9ʌ ^:  ~x  ) :* :   >*( +"( w++2+ 2+ p!" r y< < <% zr ͷr 6r 9r MDÌ:o !6!h : ʚnt2 r 62 >r z<*)$"!z<~r s^#V#N#FxN:oʲ ̀õ (# Þ CP/M Error On : Disk I/OInvalid DriveRead/Only FileRead/Only DiskPassword ErrorFile Exists? in Filenameò ò >2(a." :(2:<:5(5(;(:(2ɯ2(2{_zW{_zW ) 74#4#4)7( #  w#*J|^#V#"i(##"k(##"m(###"o(#"q(##"(!s( )*s(!()*(|!(6~67*k(w#w*m(w#w#w>2('å2(*OͶyڲ ò <*e(Ͳ:0!(:(:(ò 2*(>*ͫ"(!(s#r#p*k(N#F*m(^#V#F*(:(O}|y9*( +"*( }|yP#9*( *(DM"(*k(s#r*m(s#r#pyoxg͝DM*(0MD"(!*MD$:(Oë!(N:( «G>O:( ù* :(n` ~#foͤ2(O"(}:(O*( "(2("(:(O:(G2(!(w*~zWw+ !z?#~*!* *G!O~2(~m͗O~t>2(?:(2(O:(w:Ғ4~:(w?r##rp# ä |g}oì*g( #G ¾1*q(:(*w***> r )e(:(O!*c(:(Oͫ}@2æ  ~á *g(:(o$*~K6?~wKw**i({#zir+s{ozg*(*(|g͸*u(*(  R>22Z$w*q(>ww:(c( *(#*i(s#r*:(!(:G~#<*q(#~!;(!(!(!~6k!"2(*q(N1q*{(]*{([*y(}<^#V(t6 ^#V}e ^#V#~2(>â9͆>!"(*y(³*(X)*ÿ͂"*g(*K! ~<:wb##>w#w> r !~#<!"@*(*#":&2(͒:È0:+Òy<_W`iͫDM*w( ~bNpwDM*w(T] KKͦ*w("w(ͦ"w(@ :(N N#Fy*(}|h#ð*(ͫ# 6RX*q(6wDM*w(6# x *o(w*(*w(s#r̀*i(6#6*}("(w@*(|<ď+>!8>8> t>nͦv8 ~*o(wn:(r :(/GyOOA +¬ ¢y2(:(x¹o&:(W>OͫE:(ڟ?N/*"(y2ͦ+>2( ̀2(k,ºʺ*(*iҺ@:O~2(~WW:2(Ôyʛ?ʔx ʔ |̷ÔN͆G:(<2(x# W:(<­:2(2 G?>Gr x~:(2(Ô##~*$*">2>2: *(~w *" 2(>ʄ@~k:((s~*9~Ês~ ~ͅ<Eʀ@~›:(6!¦w͚̋,ÇPY*({zBKNyʺ Nú # #>? ;*~ w-xąH"(0 *(#ĊH( ,ˆʀHÈ2(xą ):(@O~#w͚ʀôb_++V@* )͗Os++r!x>w~6:(6~#+w#w+~;wɯ2 K,OFq-yl?Npg&:(ʓ~†wŒ~è# # x ͗w w@ ~wb͐Ú!"*>o+"! *!b("": r#~?w#>r# L=J! Lv w,b ?~O ͆=: <>w##~2( 4~?¹:(<üAX2(r K:(w++~=wv 4͗O5:(2(X:(!(v q: v v Mڂ?Ͷ >T͓Â!"(>(Â:(G:(O:(h=2(7ryy/W!(:(lڈ>F6:(_/G:(ʧ:(ڨ|OͤG:(_OzW{|:(*(}|BKN zyG:(2(9:(>#:(>#*+S!X:(ڜq: ʺ!((ʵ>2( ͤ2(O DM͸}>r "("(2(:(2(* :(:(FsO s#r:(„y==„*(!(^W*y(^#Vx+7=2(wͼկw#KWK*("(J T͞*(:(["(Ͷ:(WMںʛ>(úͶ >TJ:(!(ʷ͞x!(w4 PWP  Â*!!~~#~O~#G~.|°! w:ck[!x?[! ~ʤ͆[͗PPv qO-á=.: <ʰ! Vq##~_@w: <œ. ʩ.ʩA r r##s <}r cN! ~态O>G~G!~G~o>_yW#x#W{s+p+q7r#r#r>@ >2  !!q#p#w2(wW*e(_3ҫ -!(s:(!(xQ*q(~wɯ2(2(ù*~2(~w#~2(~wZ!""2(=2*~2(=2(2(k:*wX/ 6X*̀!~$6:03i"!~6*e(>=)Q!(QX<k*{(}<^#V{!~! _*o(~s̓  2@ !()#w*~"!!(Fw̓ :(w̚":>#2(̓ *~wć"#Fx T]## #~ ȷ   *4 # '  4 !( *~^ ^ 33G# P v :dv 6 y #*~w>2 *p@! ~*"v@*w# ) 6# ͙   !N)@ u :G*g(`~!x_<_@!*o(y<:(/G?~##~? 6!K@?F6##N6 2 p##q:r !Z$2!"ög:(2T͐-:ʹ!>2<2(!!(w: >2(*6!O~2(+A@2! ͚A=: <%~?¯"k"?~?ʾ"ZT͐"*>o"͒"!:O"(Ý"͐6͚͚c2(ZT͐-3#͗#@!Y#sY#̓ Y# Y#ͅ:(As#:(@#@!#$̓ —#>2—#͇ͱ * «#>2(͙ wB p'+!#:(w͚AP{" 2! W>O2 ø ͐R*e()$:(r "ök*w()$*c()$-͐ͤÀk*s(" :(;$:r 2͚ù͚͚}/_|/*e(W}_*c("e(}o|g"c(>2({2{2g*w(ʪ$Ң$Þ$+}$*(#}o|g:(O *s#r#w!~w/~@w//Hͥ*e(>=)%_g:0%w% %:(<%R$Hͥ:(>(~c!o#~E%^#V)$G#~#~!%~ b%% k%%##N#F#^#V#~#fo~o!o#~>T}! 6**#K" G*~ xr ͐-xą@7(͚S!ʀq&&͋"&@6,͚%Xͤ͋&͗wO~<:( g&~w#w#6##)͋&@ * g&~?G++N͆p# Þ&͐*6!¿&?~p*6 &>2ͱ ! ! ͷ w*o(w'ͧ B pͧ ,Úgsr ͐-ͤ͜!S')_'ͤ̓ ~?w͐s-?F͜p!'̓ ¡'>2ͱ ?~¾'¾''''>w'͙ =2(͜!:(wÚ~̓ ʑ'pá'!(6NN!(r )!(N !)z<*)$"!" :X(*:(w:(w#:(w*2* }D#cdfg!"()*{(X)^#V!"(:(<)!~<<)^#V*(<)"("(x+)!(*(>X)*{()Q*:(_2({2(Ē*"(͂"X*~<)ҍ) -)a*ʚ)~)6*(:(X*)!(:(T>q*k)!(:()-6>)ʴ+>2d,:+#++>29+2~2#! , , ,)x,) ,O +"!w [,O?WGzO:(V,xGyOG,xwq*}(}2*i(^#V+ d,!(K*}(@+*)):( K:(ڗ>2#-×:#-<)2#-*(BI$"" HB@ UUUUUUUUUUUUUUUUUAPDA$! @I !@D@BDI@!B$ @$I$$ "@$$@@HHBD"D$H D@!IB@ A"B HBIB$$ "$ D$!"D$H$D$I@D BD" H$BHHBDHB"H!"!!$$HH !"BB$HHDA! "D"H $B!$!AI!$ $ H  H A$I! I" $$BD"$H "AHD @ I  B"$$H @@@@" BHB  !I$ @ $@$"$AI$$IBI$I H@@I!$DA $ $@$ !$!!" !$I@I $@ $ @!H"BI"HI DIHA DD$HH $  B D$ "I$I$H$ I !  $I$I$I $@HD$@!$"A$A DBIDB  @$$DD""I $BHI$IB !@"BD BBD "@B @$ $BI I B$@" ! "H !$B I$D@! !$ @H!$$D"@A@ DHII  D@@ $ DHI"D$ @ $""@ B! @@D $$A$ $D "@I $A$$I!HI$ BA$ $DH $I$I"HI$I!$DB$"B I$$I$ !I$@DBB$@D@"I A!$ @  @  "$ $I$I$ B!$@ I @I$ HBDH$ A$H!$D$ $I"B IIBB"$B@DH"$$ IH $$ !I"AD B!B  BI$A$"@$I$!!""@DB 0CBH, 20H + ?R ENDM SLAX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 26H ENDM SLAY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 26H ENDM SRAR MACRO ?R DB 0CBH, 28H+?R ENDM SRAX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 2EH ENDM SRAY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 2EH ENDM SRLR MACRO ?R DB 0CBH, 38H + ?R ENDM SRLX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 3EH ENDM SRLY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 3EH ENDM RLD MACRO DB 0EDH, 6FH ENDM RRD MACRO DB 0EDH, 67H ENDM $Nwy!"(9"f1f! Ҕ2! ~#foCOPYRIGHT (C) 1982, DIGITAL RESEARCH 151282KK{<<ʽ<K : >! ~6 69BK! OS}!,"**NK6 :+OK2$^#V#N#FxNp:$p:Gjxj Y# A>QFQx>QGQx3ڰbڼqҼo5p5"""*!yb! ~G*!NKկ2!*$K*"x!*!@$@hK\K:K ~#~ w*NK*NK^#V#N#F!",!."*K6*}ʴ}<ʴ.}o|g "($Kt>=2(*f*(}DɯQ"(>QKQKQ>Q"%Q!2*%DM**ѵ+)) H~#+}#<:<ʲ<77:<ʢ2~77ø~7"9:OG#Q{ozg# ""BBÃà à ÃÃ1j$|@ "H$UUT$$ $I D$BA@! B$$A IA $!"  @$@$BI!!@""$DA  $I$@!SPhhP8ͱ HFlh8` nx*l6ǀ3ll8 ~ `4fPp$#`?ٶ4u`Lͮ`eU8kFo&ePJܮwXڮVmfP DJ¯@ pic@Y FՀ3lh #~K6ƀHP&Y)AD24D) #: Id ynјY)AB@h(P&!r7Bi6L@r2L@3%0h(H @P( @P( @P( !Xf. rfi3A R G!`i3N`e9L'#  Cd l [ -"ڴ#+[p[@ ^Ȋ l9O/J7ps[F՛/xFV][^+vz@W ]+z@t"^+zEW Tz@W ^+z@W ^+z@W ^)jcv;cv;cv;cv;cv;cv;cv;cv;cv;cv8-Vx ͡LȆ?쁣@¶CVK'%dm]0p@" _2lR{6݁0Xw< M"0xʄGAD"!< "Ce6LgA!@r6а0 f a0 f f'/v{BH»@Y{La0`5;l:JfѰՐ^b1b+$#b1En6`  fԐ1Uum(@8"ͩ bT|Ёnʲc`ݒͣJU;$wgvHea͵@lNd6Xt\ Ux&m&bsgHdf(eaUpW }IGÕAV!I@.1[|V!K'ԙ4yL6#Fr8#* Jj\U +ͣMU9Lg!yI ;6 pfiEt(Ub F$ [@{m8A8upBk g>:N ,:h : Rxf0V jo<- 'i0)d`@!M#%y`ݒ{JI;%%Ydn0ڄ-V<|fހfQfݠ6m]YmrXHk!W!*UC6(9``* º`+`1YbGV ^G< E`Y jV_0H05O#+v: s خSx:q$Of`R(Ԅ.- ͼ{>X0Y""f@VmjYVlUyBlڰ :0rP1nʲLJ5cAU %Ja`ͼ` `@k+T$ dp#t f`C՛V]b3jH6'p0!!*WH|#+x[݀:a v@?쁲[*@`^2K6meRq}Bwٴj^2! ;4f@RzKƬ;ͽ~ â:!~mU0wz@uB@+͵͸ja] mfݠ6ma`Q2XCp̃\Ub4f07 JYM"3i(2GV ew*a q='@DuO#?(W ;k+6 ~PV BP@2!~sǣ+t9erl[U;D +Wx z2AEwvlfuhٶI,V f`CMa 2YMWx!y@b+ó`@ @-U Uw[AF: c6B*OU > 0"[-Ke%ـlDp"[<-Ki%pm@D"[T-Kl%A@mD"[n-Kn%ЉmD"[-?帡`n@D$"[-Ks% {tX$@UaUzjH+{P@3k(3jK4K6`JYG&ml fհmIW, x@(dz¦.U _6J XKUw(A^Od`@F*K՛v#ץf@#sFI' LOADER y; !91""|0!~ʞz=_: _* ""*og*%|}D S#N#F:ʒ#4ʝ^#V{‚:¿*.~w*DM!&_*.& >k s#rr+6.""1*D`.45. F.~. ^#Vx>`. s#rz 6#N#fi%$g1:=<@v_}v=p{_3;{<g"T=X3*j ~P#~R#~L{gbk#N#Fk$&Zcx {~#o}o1!;!"Ï:= w*wWx ~#&*.~s*"ѷ\ Cannot load Program 221282 COPYR '82 DRI <bHA$@DH   A@!" $$@1-! j 1".~2.~2 :Xck*kͮ  b < .~=>$.w.6#w.6#w.61.~  .~~w@.p T~º>+~.~~! yͮ Ë.~~w2g !PROFILE.S !+2 !  +~d {   O! w+w+: =w! 5 c ʋ  :p  m>> ͧ  N Ĩ –.~+w.~2  9 : ! ~##~ !7 : !Կ : x*l " !ZXچ! 6  zz: 6 : %2p  ͆ : =̀ 2r  DIR TYPE ERASE RENAME DIRSYS USER u"Q}:\=p:r Aæ R ÂN ͙ʸ} !M 545 x ]  ̵ 6 : oG! ~怹>2M  xf>:ͦ ͤ ͍ ͤ f ¹2 lf   ͫR  L͞L I *  *  A }_Yl !ͮ ͒6 \&đ %* "l ͍  ûȷ45: w ? A I N   SUBMIT COM ! ͮ ! 6 #"l  !cͿ  O!:r :ͦ ͍ !~B I !pͰ ^#VCOM SUB PRL y!cͰ  î !" * %.2P#ͮ !g 4*l +"l ͷ 2 "Qx2Sl "Tx2V!q ~ :p ͆ .ڶ2* og$2| .w#w#w#w.~ .w#w~?w; ; ! ~#49 w#~$ A  < > _I  ! 6 ! ~#Ͱ 6 m   _  ! 6=  { *.pѯ:r x , \<=!Ͱ =ɯ2 \s 2 ! D ;! : .44 #4"l ~[* 2 a7 {7 w!Y #! *l "l " ~ U #D ]T!̷ 6*%.w#w!} 6 r 6 #w.6#6 #t#6.wo*.s#r.rͧ ̧ m . ^#V45+ w#w.f.5\A "l " l |F# !( | !( : x. +"l ! ͮ   ͮ ~!G8 * ~;#1 կA *l ~:g X #I ѯ*l  *l ~0څ :҅ q X x<Ü AX QX X ~@#~:k #^ *jT~# ® wy#ù ! 4 : !Ͱ ~@*h~ yw y/w*hw*h~I E> ͦ > æ % 0  < : ~ȹͦ #* A !g ~6*  * >? A *l " ~0: :: q "l x~0 xG#Gs : &͘ ͤ &ͦ %˜ >  Ʌo$>?· !  > # ͮ x> # ~ Enter User #: $No File$ required$ERASE $ (Y/N)? $ Press RETURN to Continue $ (User 0)$NON-SYSTEM FILE(S) EXIST$: $$$ SUBfunction cr equ 0dh ; carriage return lf equ 0ah ; line feed org 100h mvi d,5 ; Perform 5 times loop: push d ; save counter mvi c,prtstr lxi d,call$msg ; print call message call bdos mvi c,vers call bdos ; try to get version # ; CALLVERS will intercept mov a,l sta curvers pop d dcr d ; decrement counter jnz loop mvi c,0 jmp bdos call$msg: db cr,lf,'**** CALLVERS **** $' curvers db 0 end lect ; put new memory control byte pop b ; restore register b ret ; 128 bytes at a time end ID Syntax: SID {pgm-filespec} {,sym-filespec} Explanation: The SID symbolic debugger allows you to monitor and test programs developed for the 8080 microprocessor. SID supports real-time breakpoints, fully mo RMAC SCB $$PZ SZ RMAC LDRBIOS $$PZ SZ LINK CPMLDR.img[L2000]=CPMLDR,LDRBIOS,SCB ERA SCB.rel ERA LDRBIOS.rel ERA CPMLDR.sym MAC SECTOR0 $$PZ SZ HEXCOM SECTOR0 REN SECTOR0.img=SECTOR0.COM PIP Trk0.img=SECTOR0.img,CPMLDR.img,CCP.img[ro] COPYSYS TRK0.img XREF b:MYPROG A>XREF b:MYPROG $P te to Read-Write. SYS sets the file attribute to SYS. DIR sets the file attribute to DIR. ARCHIVE=OFF means that the file has not been backed up (archived). ARCHIVE=ON means that the file has been backed up (archived). The Archive attribute can be turned on by SET or by RMAC SCB $$PZ SZ RMAC BNKBIOS3 $$PZ SZ RMAC DISKIO $$PZ SZ LINK BNKBIOS3[B]=BNKBIOS3,SCB,DISKIO ERA SCB.REL ERA BNKBIOS3.REL ERA DISKIO.REL ERA BNKBIOS3.SYM GENCPM AUTO DISPLAY ERA BNKBIOS3.SPR K0.img XREF b:MYPROG A>XREF b:MYPROG $P te to Read-Write. SYS sets the file attribute to SYS. DIR sets the file attribute to DIR. ARCHIVE=OFF means that the file has not been backed up (archived). ARCHIVE=ON means that the file has been backed up (archived). The Archive attribute can be turned on by SET or by PRTMSG = N PAGWID = 4F PAGLEN = 17 BACKSPC = N RUBOUT = Y BOOTDRV = A MEMTOP = FF BNKSWT = Y COMBAS = C0 LERROR = Y NUMSEGS = 03 MEMSEG00 = 8D,33,03 MEMSEG01 = 40,4B,00 MEMSEG02 = 40,40,07 MEMSEG03 = 00,00,00 MEMSEG04 = 00,00,00 MEMSEG05 = 00,00,00 MEMSEG06 = 00,00,00 MEMSEG07 = 00,00,00 MEMSEG08 = 00,00,00 MEMSEG09 = 00,00,00 MEMSEG0A = 00,00,00 MEMSEG0B = 00,00,00 MEMSEG0C = 00,00,00 MEMSEG0D = 00,00,00 MEMSEG0E = 00,00,00 MEMSEG0F = 00,00,00 HASHDRVA = Y HASHDRVB = Y HASHDRVC = Y HASHDRVD = Y HASHDRVE = N HASHDRVF = N HASHDRVG = N HASHDRVH = N HASHDRVI = N HASHDRVJ = N HASHDRVK = N HASHDRVL = N HASHDRVM = N HASHDRVN = N HASHDRVO = N HASHDRVP = N ALTBNKSA = Y ALTBNKSB = Y ALTBNKSC = Y ALTBNKSD = Y ALTBNKSE = N ALTBNKSF = N ALTBNKSG = N ALTBNKSH = N ALTBNKSI = N ALTBNKSJ = N ALTBNKSK = N ALTBNKSL = N ALTBNKSM = N ALTBNKSN = N ALTBNKSO = N ALTBNKSP = N NDIRRECA = 04 NDIRRECB = 04 NDIRRECC = 04 NDIRRECD = 04 NDIRRECE = 00 NDIRRECF = 00 NDIRRECG = 00 NDIRRECH = 00 NDIRRECI = 00 NDIRRECJ = 00 NDIRRECK = 00 NDIRRECL = 00 NDIRRECM = 00 NDIRRECN = 00 NDIRRECO = 00 NDIRRECP = 00 NDTARECA = 08 NDTARECB = 08 NDTARECC = 08 NDTARECD = 04 NDTARECE = 00 NDTARECF = 00 NDTARECG = 00 NDTARECH = 00 NDTARECI = 00 NDTARECJ = 00 NDTARECK = 00 NDTARECL = 00 NDTARECM = 00 NDTARECN = 00 NDTARECO = 00 NDTARECP = 00 ODIRDRVA = A ODIRDRVB = B ODIRDRVC = C ODIRDRVD = D ODIRDRVE = E ODIRDRVF = F ODIRDRVG = G ODIRDRVH = H ODIRDRVI = I ODIRDRVJ = J ODIRDRVK = K ODIRDRVL = L ODIRDRVM = M ODIRDRVN = N ODIRDRVO = O ODIRDRVP = P ODTADRVA = A ODTADRVB = B ODTADRVC = C ODTADRVD = D ODTADRVE = E ODTADRVF = F ODTADRVG = G ODTADRVH = H ODTADRVI = I ODTADRVJ = J ODTADRVK = K ODTADRVL = L ODTADRVM = M ODTADRVN = N ODTADRVO = O ODTADRVP = P OVLYDIRA = N OVLYDIRB = N OVLYDIRC = N OVLYDIRD = N OVLYDIRE = N OVLYDIRF = N OVLYDIRG = N OVLYDIRH = N OVLYDIRI = N OVLYDIRJ = N OVLYDIRK = N OVLYDIRL = N OVLYDIRM = N OVLYDIRN = N OVLYDIRO = N OVLYDIRP = N OVLYDTAA = N OVLYDTAB = N OVLYDTAC = N OVLYDTAD = N OVLYDTAE = N OVLYDTAF = N OVLYDTAG = N OVLYDTAH = N OVLYDTAI = N OVLYDTAJ = N OVLYDTAK = N OVLYDTAL = N OVLYDTAM = N OVLYDTAN = N OVLYDTAO = N OVLYDTAP = N CRDATAF = N DBLALV = Y Ãà à ÃÃ1j$|@ "H$UUT$$ $I D$BA@! B$$A IA $!"  @$@$BI!!@""$DA  $I$@!; @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 DB 0FDH,36H,?D,?N ENDM LDAI MACRO DB 0EDH,57H ENDM LDAR MACRO DB 0EDH,5FH ENDM STAI MACRO DB 0EDH,47H ENDM STAR MACRO DB 0EDH,4FH ENDM LXIX MACRO ?NNNN DB 0DDH,21H DW ?NNNN ENDM LXIY MACRO ?NNNN DB 0FDH,21H DW ?NNNN ENDM LDED MACRO ?NNNN DB 0EDH,5BH DW ?NNNN ENDM LBCD MACRO ?NNNN DB 0EDH,4BH DW ?NNNN ENDM LSPD MACRO ?NNNN DB 0EDH,07BH DW ?NNNN ENDM LIXD MACRO ?NNNN DB 0DDH,2AH DW ?NNNN ENDM LIYD MACRO ?NNNN DB 0FDH,2AH DW ?NNNN ENDM SBCD MACRO ?NNNN DB 0EDH,43H DW ?NNNN ENDM SDED MACRO ?NNNN DB 0EDH,53H DW ?NNNN ENDM SSPD MACRO ?NNNN DB 0EDH,73H DW ?NNNN ENDM SIXD MACRO ?NNNN DB 0DDH,22H DW ?NNNN ENDM SIYD MACRO ?NNNN DB 0FDH,22H DW ?NNNN ENDM SPIX MACRO DB 0DDH,0F9H ENDM SPIY MACRO DB 0FDH,0F9H ENDM PUSHIX MACRO DB 0DDH,0E5H ENDM PUSHIY MACRO DB 0FDH,0E5H ENDM POPIX MACRO DB 0DDH,0E1H ENDM POPIY MACRO DB 0FDH,0E1H ENDM EXAF MACRO DB 08H ENDM EXX MACRO DB 0D9H ENDM XTIX MACRO DB 0DDH,0E3H ENDM XTIY MACRO DB 0FDH,0E3H ENDM LDI MACRO DB 0EDH,0A0H ENDM LDIR MACRO DB 0EDH,0B0H ENDM LDD MACRO DB 0EDH,0A8H ENDM LDDR MACRO DB 0EDH,0B8H ENDM CCI MACRO DB 0EDH,0A1H ENDM CCIR MACRO DB 0EDH,0B1H ENDM CCD MACRO DB 0EDH,0A9H ENDM CCDR MACRO DB 0EDH,0B9H ENDM ADDX MACRO ?D @CHK ?D DB 0DDH,86H,?D ENDM ADDY MACRO ?D @CHK ?D DB 0FDH,86H,?D ENDM ADCX MACRO ?D @CHK ?D DB 0DDH,8EH,?D ENDM ADCY MACRO ?D @CHK ?D DB 0FDH,8EH,?D ENDM SUBX MACRO ?D @CHK ?D DB 0DDH,96H,?D ENDM SUBY MACRO ?D @CHK ?D DB 0FDH,96H,?D ENDM 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 @CHK ?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,5EH ENDM BC EQU 0 DE EQU 2 HL EQU 4 IX EQU 4 IY EQU 4 DADC MACRO ?R DB 0EDH,?R*8+4AH ENDM DSBC MACRO ?R DB 0EDH,?R*8+42H ENDM DADX MACRO ?R DB 0DDH,?R*8+09H ENDM DADY MACRO ?R DB 0FDH,?R*8+09H ENDM INXIX MACRO DB 0DDH,23H ENDM INXIY MACRO DB 0FDH,23H ENDM DCXIX MACRO DB 0DDH,2BH ENDM DCXIY MACRO DB 0FDH,2BH ENDM BIT MACRO ?N,?R DB 0CBH,?N*8+?R+40H ENDM SETB MACRO ?N,?R DB 0CBH,?N*8+?R+0C0H ENDM RES MACRO ?N,?R DB 0CBH,?N*8+?R+80H ENDM BITX MACRO ?N,?D @CHK ?D DB 0DDH,0CBH,?D,?N*8+46H ENDM BITY MACRO ?N,?D @CHK ?D DB 0FDH,0CBH,?D,?N*8+46H ENDM SETX MACRO ?N,?D @CHK ?D DB 0DDH,0CBH,?D,?N*8+0C6H ENDM SETY MACRO ?N,?D @CHK ?D DB 0FDH,0CBH,?D,?N*8+0C6H ENDM RESX MACRO ?N,?D @CHK ?D DB 0DDH,0CBH,?D,?N*8+86H ENDM RESY MACRO ?N,?D @CHK ?D DB 0FDH,0CBH,?D,?N*8+86H ENDM JR MACRO ?N DB 18H,?N-$-1 ENDM JRC MACRO ?N DB 38H,?N-$-1 ENDM JRNC MACRO ?N DB 30H,?N-$-1 ENDM JRZ MACRO ?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 ENDM OUTIR MACRO DB 0EDH,0B3H ENDM OUTD MACRO DB 0EDH,0ABH ENDM OUTDR MACRO DB 0EDH,0BBH ENDM RLCR MACRO ?R DB 0CBH, 00H + ?R ENDM RLCX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 06H ENDM RLCY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 06H ENDM RALR MACRO ?R DB 0CBH, 10H+?R ENDM RALX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 16H ENDM RALY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 16H ENDM RRCR MACRO ?R DB 0CBH, 08H + ?R ENDM RRCX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 0EH ENDM RRCY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 0EH ENDM RARR MACRO ?R DB 0CBH, 18H + ?R ENDM RARX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 1EH ENDM RARY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 1EH ENDM SLAR MACRO ?R DB 0CBH, 20H + ?R ENDM SLAX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 26H ENDM SLAY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 26H ENDM SRAR MACRO ?R DB 0CBH, 28H+?R ENDM SRAX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 2EH ENDM SRAY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 2EH ENDM SRLR MACRO ?R DB 0CBH, 38H + ?R ENDM SRLX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 3EH ENDM SRLY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 3EH ENDM RLD MACRO DB 0EDH, 6FH ENDM RRD MACRO DB 0EDH, 67H ENDM ; Macro Definitions for CP/M3 BIOS Data Structures. ; dtbl - drive table ; dph translate$table, - disk parameter header ; disk$parameter$block, ; checksum$size, (optional) ; alloc$size (optional) ; skew sectors, - skew table ; skew$factor, ; first$sector$number ; dpb physical$sector$size, - disk parameter block ; physical$sectors$per$track, ; number$tracks, ; block$size, ; number$dir$entries, ; track$offset, ; checksum$vec$size (optional) ; Drive Table. Contains 16 one word entries. dtbl macro ?list local ?n ?n set 0 irp ?drv, ?n set ?n+1 dw ?drv endm if ?n > 16 .' Too many drives. Max 16 allowed' exitm endif if ?n < 16 rept (16-?n) dw 0 endm endif endm dph macro ?trans,?dpb,?csize,?asize local ?csv,?alv dw ?trans ; translate table address db 0,0,0,0,0,0,0,0,0 ; BDOS Scratch area db 0 ; media flag dw ?dpb ; disk parameter block if not nul ?csize dw ?csv ; checksum vector else dw 0FFFEh ; checksum vector allocated by endif ; GENCPM if not nul ?asize dw ?alv ; allocation vector else dw 0FFFEh ; alloc vector allocated by GENCPM endif dw 0fffeh,0fffeh,0fffeh ; dirbcb, dtabcb, hash alloc'd ; by GENCPM db 0 ; hash bank if not nul ?csize ?csv ds ?csize ; checksum vector endif if not nul ?asize ?alv ds ?asize ; allocation vector endif endm dpb macro ?psize,?pspt,?trks,?bls,?ndirs,?off,?ncks local ?spt,?bsh,?blm,?exm,?dsm,?drm,?al0,?al1,?cks,?psh,?psm local ?n ;; physical sector mask and physical sector shift ?psh set 0 ?n set ?psize/128 ?psm set ?n-1 rept 8 ?n set ?n/2 if ?n = 0 exitm endif ?psh set ?psh + 1 endm ?spt set ?pspt*(?psize/128) ?bsh set 3 ?n set ?bls/1024 rept 8 ?n set ?n/2 if ?n = 0 exitm endif ?bsh set ?bsh + 1 endm ?blm set ?bls/128-1 ?size set (?trks-?off)*?spt ?dsm set ?size/(?bls/128)-1 ?exm set ?bls/1024 if ?dsm > 255 if ?bls = 1024 .'Error, can''t have this size disk with 1k block size' exitm endif ?exm set ?exm/2 endif ?exm set ?exm-1 ?all set 0 ?n set (?ndirs*32+?bls-1)/?bls rept ?n ?all set (?all shr 1) or 8000h endm ?al0 set high ?all ?al1 set low ?all ?drm set ?ndirs-1 if not nul ?ncks ?cks set ?ncks else ?cks set ?ndirs/4 endif dw ?spt ; 128 byte records per track db ?bsh,?blm ; block shift and mask db ?exm ; extent mask dw ?dsm ; maximum block number dw ?drm ; maximum directory entry number db ?al0,?al1 ; alloc vector for directory dw ?cks ; checksum size dw ?off ; offset for system tracks db ?psh,?psm ; physical sector size shift ; and mask 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 skew macro ?secs,?skf,?fsc ;; generate the translate table ?nxtsec set 0 ;;next sector to fill ?nxtbas set 0 ;;moves by one on overflow gcd %?secs,?skf ;; ?gcdn = gcd(?secs,skew) ?neltst set ?secs/?gcdn ;; neltst is number of elements to generate ;; before we overlap previous elements ?nelts set ?neltst ;;counter rept ?secs ;;once for each sector db ?nxtsec+?fsc ?nxtsec set ?nxtsec+?skf if ?nxtsec >= ?secs ?nxtsec set ?nxtsec-?secs endif ?nelts set ?nelts-1 if ?nelts = 0 ?nxtbas set ?nxtbas+1 ?nxtsec set ?nxtbas ?nelts set ?neltst endif endm endm  ; 'PORTS.LIB' ; ' Copyright (C), 1983 Personal Micro Computers, Inc.' ; ' 475 Ellis St. Mountain View, CA 94304' ; ' version 3.0 6 June 1983' ; ***************************************************** ; * * ; * NOTE: * ; * * ; * DO NOT MODIFY ANY CODE IN THIS MODULE * ; * * ; * PMC CANNOT SUPPORT ANY MODIFICATIONS * ; * * ; ***************************************************** ; -PMC 101- Port Definitions ; I/O Port addresses p$fdcmnd equ 080H ;WD1797 command p$fdstat equ 080H ; status p$fdtrack equ 081H ; track p$fdsector equ 082H ; sector p$fddata equ 083H ; data p$select equ 084H ; select ; set b6 for Single Density ; res b6 for Double Density ; set b5 for Motor On ; res b5 for Motor off ; set b3 for drive #4 (D) ; set b2 for drive #3 (C) ; set b1 for drive #2 (B) ; set b0 for drive #1 (A) p$TRM$data equ 088H ;Zilog DART Channel A data p$MDM$data equ 089H ; B data p$TRM$stat equ 08AH ; A status p$MDM$stat equ 08BH ; B status p$cent$data equ 08CH ;Centronics parallel data p$cent$stat equ 08CH ; status centronics$mask equ 0011$0000b ; desired status mask ; b7 res = Busy ; b6 res = Paper Empty ; b5 res = Printer Selected ; b4 res = not Fault p$boot equ 090H ;PROM OUT any bit to Phantom boot EPROM out p$unboot equ 091H ; OUT any bit to enable boot EPROM p$bankselect equ 092H ;Bank select res all bits for primary bank ; set b7 for alternate 64K bank ; set b2 for upper 32K ; res b2 for lower 32K ; Bank is from 4000H to BFFFH p$baud equ 093H ;Baud rate Upper nibble = A channel ; Lower nibble = B channel ; see Modebaud.lib for definition p$getbank equ 094H ;read bank select port P$getbaud equ 095H ;read baud rate port p$rtc equ 09CH ;Zilog CTC ch0 Real Time Clock p$ctc1 equ 09DH ; ch1 Reserved p$index equ 09EH ; ch2 Disk Drive Index Pulse P$ctc3 equ 09FH ; ch3 User available DB 0CBH, 20H + ?R ENDM SLAX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 26H ENDM SLAY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 26H ENDM SRAR MACRO ?R DB 0CBH, 28H+?R ENDM SRAX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 2EH ENDM SRAY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 2EH ENDM SRLR MACRO ?R DB 0CBH, 38H + ?R ENDM SRLX MACRO ?D @CHK ?D DB 0DDH, 0CBH, ?D, 3EH ENDM SRLY MACRO ?D @CHK ?D DB 0FDH, 0CBH, ?D, 3EH ENDM RLD MACRO DB 0EDH, 6FH ENDM RRD MACRO DB 0EDH, 67H ENDM   ; 'PMCequ.LIB' ; ' Copyright (C), 1983 Personal Micro Computers, Inc.' ; ' 475 Ellis St. Mountain View, CA 94304' ; ' version 3.0 6 June 1983' true equ -1 false equ not true CTS$protocol equ false ;True = CTS protocol enabled DSR$protocol equ false ;True = DSR protocol enabled Parity$Mask equ false ;True = Parity bit masked from ; TERMINAL & MODEM input ; ***************************************************** ; * * ; * NOTE: * ; * * ; * DO NOT MODIFY ANY CODE IN THIS MODULE * ; * * ; * PMC CANNOT SUPPORT ANY MODIFICATIONS * ; * * ; ***************************************************** ; -PMC 101- Misc Values ; ASCII CR equ 0dh LF equ 0ah bdos equ 0005h bell equ 7 Bkspc equ 8 ctlQ equ 'Q'-'@' ctlS equ 'S'-'@' space equ 20H Pgm equ '3' Vrs equ '0' ; -PMC 101- Memory variables Bank0$cmd equ 00h ;turns on Bank 0 Bank1$cmd equ 81h ; 1 Bank2$cmd equ 82h ; 2 comon equ 0C000h ;physical adr of Common memory window equ 4000h ;physical adr of start of bank window sys$bank equ 0 ;CP/M system bank tpa equ 100h ;TPA begins at this adr tpa$bank equ 1 ;TPA located in this bank ccp equ 0100h ;CCP gets loaded into the TPA at this adr ccp$length equ 0C80h ;length of CCP.com ccp$ld$adr equ window*2 ;CCP stored at this adr ccp$bank equ 3 ;CCP stored in this bank ; -PMC 101- Device Variables max$devices equ 2 ;maximum I/O devices (0,1,2) ; -PMC 101- Real Time Clock Variables MaxFrc equ 62 ;RTC pps 62*16.128ms=.999936sec RTCcnt equ 252 ;RTC CTC ch0 count ; -PMC 101- Disk Variables ; Misc max$drive equ 4 ;max possible number of physical drives SctCnt equ 5 ;Physical sectors per track retries equ 10 ;disk re try quantity IdxCnt equ 10 ;index hole count to drive motor time out Seldly equ 102 ;drive Select/motor on delay =504ms Sekdly equ 4 ;head settle delay =19ms dpb$length equ 18 ;fixed length of a DPB +1 for PMC extension trans$length equ 37 ;Max length of any translation table ; Select commands DrvA equ 001H ;Drive select bit set DrvB equ 002H DrvC equ 004H DrvD equ 008H MOTbit equ 5 ;MOTOR on bit (Select) MOTon equ 020H ;motor on bit set DENbit equ 6 ;DENSITY bit (Select) SDen equ 040H ;Single Density enable bit set DrvAon equ DrvA+MOTon ;drive A + motor on bit set DrvBon equ DrvB+MOTon DrvCon equ DrvC+MOTon DrvDon equ DrvD+MOTon ; FDC commands Homcmd equ 000H ;TYP I 6Ms step, no verify, no HLD HomVcmd equ 004H ;TYP I 6Ms step, verify, no HLD Sekcmd equ 010H ; I 6Ms step, no verify, no HLD SekVCmd equ 014H ; I 6Ms step, verify, no HLD RDcmd equ 088H ; II single Sector, no Side test, no HLD RDMcmd equ 098H ; II mult sector, IBM fmt, HLD WRcmd equ 0A8H ; II single sector, no side test no HLD WRTcmd equ 0F0H ; III write track IDcmd equ 0C0H ; III no HLD FRCcmd equ 0D0H ; IV clear previous Cmd, no int SIDbit equ 1 ;SIDE bit Sid2 equ 002H ;Side Select bit set ; -PMC 101- Drive TYPE conversion variables ;Format Types ; xx Type0 equ 0000$0000b ;Double Sided Double Density Type1 equ 0000$0001b ;Double Sided Single Density Type2 equ 0000$0010b ;Single Sided Double Density Type3 equ 0000$0011b ;Single Sided Single Density Type? equ 1111$1111b ;Undefined type ;Head Switching types ; xx Sct$sw equ 0000$0000b ;Switch head on sector count Trk$sw equ 0000$0100b ;Switch head on track count Odd$sw equ 0000$1000b ;Switch to head 1 on Odd track numbers Evn$sw equ 0000$1100b ;Switch to head 1 on Even track numbers ;Track# for head switching (Used with Trk$sw only) ; xx Trk34 equ 0000$0000b ;Switch to head 1 if Track >= 34 Trk36 equ 0001$0000b ; 36 Trk41 equ 0010$0000b ; 41 Trk81 equ 0011$0000b ; 81 ; x Side0first equ 0000$0000b ;Start with Side 0 first Side1first equ 0100$0000b ;Start with Side 1 first ;Sector# for Head switching (Used with Sct$sw only) ; xxxx Sct6 equ 0000$0000b ;Switch to head 1 if sector >= 6 Sct7 equ 0001$0000b ; 7 Sct8 equ 0010$0000b ; 8 Sct9 equ 0011$0000b ; 9 Sct10 equ 0100$0000b ; 10 Sct11 equ 0101$0000b ; 11 Sct12 equ 0110$0000b ; 12 Sct13 equ 0111$0000b ; 13 Sct14 equ 1000$0000b ; 14 Sct15 equ 1001$0000b ; 15 Sct16 equ 1010$0000b ; 16 Sct17 equ 1011$0000b ; 17 Sct18 equ 1100$0000b ; 18 Sct19 equ 1101$0000b ; 19 Sct20 equ 1110$0000b ; 20 Sct21 equ 1111$0000b ; 21 ;Conversion Drive Types PMC101d equ Type0+Sct$sw+Sct6 ;1024x 5x40 Ds Dd Morrow2 equ Type0+Odd$sw ;1024x 5x40 Ds Dd InterSystems1 equ Type0+Sct$sw+Sct11 ; 512x10x40 Ds Dd Televideo802 equ Type0+Sct$sw+Sct19 ; 256x18x40 Ds Dd HP125 equ Type0+Odd$sw ; 256x16x33 Ds Dd PMC101s equ Type2 ;1024x 5x40 Ss Dd Morrow1 equ Type2 ;1024x 5x40 Ss Dd Osborne2 equ Type2 ;1024x 5x40 Ss Dd Kaypro equ Type2 ; 512x10x40 Ss Dd InterSystems2 equ Type2 ; 512x10x40 Ss Dd Dec equ Type2 ; 512x 9x40 Ss Dd IBM equ Type2 ; 512x 8x40 Ss Dd Xerox2 equ Type2 ; 256x17x40 Ss Dd Z37 equ Type2 ; 256x16x40 Ss Dd Osborne1 equ Type3 ; 256x10x40 Ss Sd Xerox1 equ Type3 ; 128x18x40 Ss Sd Omikron equ Type3 ; 128x18x40 Ss Sd Cromemco equ Type3 ; 128x18x40 Ss Sd SM :?i!R @Yb }Y-S,(}ZhH4* "L "DT*A@h(T* dR),@E)!T*PT* (R)BPT PT ' ; equates for mode byte bit fields mb$input equ 0000$0001b ; device may do input mb$output equ 0000$0010b ; device may do output mb$in$out equ mb$input+mb$output mb$soft$baud equ 0000$0100b ; software selectable ; baud rates mb$serial equ 0000$1000b ; device may use protocol mb$xon$xoff equ 0001$0000b ; XON/XOFF protocol ; enabled baud$none equ 0 ; no baud rate associated ; with this device baud$50 equ 1 ; 50 baud baud$75 equ 2 ; 75 baud baud$110 equ 3 ; 110 baud baud$134 equ 4 ; 134.5 baud baud$150 equ 5 ; 150 baud baud$300 equ 6 ; 300 baud baud$600 equ 7 ; 600 baud baud$1200 equ 8 ; 1200 baud baud$1800 equ 9 ; 1800 baud baud$2400 equ 10 ; 2400 baud baud$3600 equ 11 ; 3600 baud baud$4800 equ 12 ; 4800 baud baud$7200 equ 13 ; 7200 baud baud$9600 equ 14 ; 9600 baud baud$19200 equ 15 ; 19.2k baud   title 'System Control Block Definition for CP/M3 BIOS' public @civec, @covec, @aivec, @aovec, @lovec, @bnkbf public @crdma, @crdsk, @vinfo, @resel, @fx, @usrcd public @mltio, @ermde, @erdsk, @media, @bflgs public @date, @hour, @min, @sec, ?erjmp, @mxtpa scb$base equ 0FE00H ; Base of the SCB @CIVEC equ scb$base+22h ; Console Input Redirection ; Vector (word, r/w) @COVEC equ scb$base+24h ; Console Output Redirection ; Vector (word, r/w) @AIVEC equ scb$base+26h ; Auxiliary Input Redirection ; Vector (word, r/w) @AOVEC equ scb$base+28h ; Auxiliary Output Redirection ; Vector (word, r/w) @LOVEC equ scb$base+2Ah ; List Output Redirection ; Vector (word, r/w) @BNKBF equ scb$base+35h ; Address of 128 Byte Buffer ; for Banked BIOS (word, r/o) @CRDMA equ scb$base+3Ch ; Current DMA Address ; (word, r/o) @CRDSK equ scb$base+3Eh ; Current Disk (byte, r/o) @VINFO equ scb$base+3Fh ; BDOS Variable "INFO" ; (word, r/o) @RESEL equ scb$base+41h ; FCB Flag (byte, r/o) @FX equ scb$base+43h ; BDOS Function for Error ; Messages (byte, r/o) @USRCD equ scb$base+44h ; Current User Code (byte, r/o) @MLTIO equ scb$base+4Ah ; Current Multi-Sector Count ; (byte,r/w) @ERMDE equ scb$base+4Bh ; BDOS Error Mode (byte, r/o) @ERDSK equ scb$base+51h ; BDOS Error Disk (byte,r/o) @MEDIA equ scb$base+54h ; Set by BIOS to indicate ; open door (byte,r/w) @BFLGS equ scb$base+57h ; BDOS Message Size Flag (byte,r/o) @DATE equ scb$base+58h ; Date in Days Since 1 Jan 78 ; (word, r/w) @HOUR equ scb$base+5Ah ; Hour in BCD (byte, r/w) @MIN equ scb$base+5Bh ; Minute in BCD (byte, r/w) @SEC equ scb$base+5Ch ; Second in BCD (byte, r/w) ?ERJMP equ scb$base+5Fh ; BDOS Error Message Jump ; (word, r/w) @MXTPA equ scb$base+62h ; Top of User TPA ; (address at 6,7)(word, r/o) end b,0Fh,07h db 3,p$zpio$2a,0CFh,0F8h,07h db 0 end r to 3. ///1XREF Syntax: XREF {d:} filename {$P} Explanation: XREF provides a cross-reference summary of variable usage in a program. XREF requires the .PRN and .SYM files produced by MAC or RMAC for input to the program. The SYM and PRN files must have the same filename as the filename in the XREF command tail. XREF outputs a file of type .XRF. Examples: A>XREF b:MYPROG A>XREF b:MYPROG $P   Title 'Boot parameters stored on Sector 0' ; ***************************************************** ; * * ; * NOTE: * ; * * ; * DO NOT MODIFY ANY CODE IN THIS MODULE * ; * * ; * PMC CANNOT SUPPORT ANY MODIFICATIONS * ; * * ; ***************************************************** ; 'SECTOR0' ; ' Copyright (C), 1983 Personal Micro Computers, Inc.' ; ' 475 Ellis St. Mountain View, CA 94304' ; ' version 3.0 6 June 1983' ; maclib PMCequ maclib modebaud BaudByte equ Baud$19200 SHL 4 + Baud$9600 ORG tpa ;so as not to confuse HEXCOM Execute: ;Where to begin exectuion after Boot db Bank0$cmd ;Execution Bank dw 2000h ;Execution Address Load1: ;Load CPMLDR.IMG db Bank0$cmd ;Load #1 Bank #0 dw 2000h ; Address db 0000$0000b ; Diskette Side #1 db 0 ; Track number 0 db 2 ; Starting Sector number 2 db 4 ; Ending Sector number 4 Load2: ;Load CCP.IMG db Bank2$cmd ;Load #2 Bank #2 dw ccp$ld$adr ; Address db 0000$0010b ; Diskette Side #2 db 0 ; Track number 0 db 1 ; Starting Sector number 1 db ccp$length/1024+1 ; Ending Sector number 4 db -1,-1,-1,-1,-1,-1,-1 ;Terminate load group db -1,-1,-1,-1,-1,-1,-1 db -1,-1,-1,-1,-1,-1,-1 db -1,-1,-1,-1,-1,-1,-1 db -1,-1,-1,-1,-1,-1,-1 ds 80h-($-Execute) Baud: ;Power on Baud rates db BaudByte ;A channel baud + B channel baud Drives: ;Quantity of Disk drives currently available db 4 ds 10h-($-Baud) SerA: ;Serial channel A db 0 ; register 0 db 0001$1000b ; reset db 1 ; register 1 db 0000$0000b ; no interrupts db 3 ; register 3 db 1100$0001b ; 8 data bits, Rx enable db 4 ; register 4 db 0100$0100b ; x16 clock, 1 stop bit db 5 ; register 5 db 1110$1010b ; DTR on, 8 data bits, Tx enable, RTS on db -1,-1,-1,-1,-1,-1 SerB: ;Serial channel B db 0 ; register 0 db 0001$1000b ; reset db 1 ; register 1 db 0000$0000b ; no interrupts db 3 ; register 3 db 1100$0001b ; 8 data bits, Rx enable db 4 ; register 4 db 0100$0100b ; x16 clock, 1 stop bit db 5 ; register 5 db 1110$1010b ; DTR on, 8 data bits, Tx enable, RTS on db 2 ; register 2 db 0111$0000b ; Interrupt Vector db -1,-1,-1,-1 ds 3ffh-($-Execute) last: db 00 ;Last byte end  ds 2 ; current sector number @dma ds 2 ; current DMA address @dbnk db 0 ; bank for DMA operations ; Disk Error message drive$msg db cr,lf,bell,'Error on ',0 track$msg db ': T-',0 sector$msg db ', S-',0 table10: dw -1000,-100,-10,-1,0 ;Hex to Dec table end  title 'Loader BIOS for CP/M 3.0 & PMC-101' ; ***************************************************** ; * * ; * NOTE: * ; * * ; * DO NOT MODIFY ANY CODE IN THIS MODULE * ; * * ; * PMC CANNOT SUPPORT ANY MODIFICATIONS * ; * * ; ***************************************************** ; 'LDRBIOS' ; ' Copyright (C), 1983 Personal Micro Computers, Inc.' ; ' 475 Ellis St. Mountain View, CA 94304' ; ' version 3.0 6 June 1983' ; ; Requirements: ; ; Must Boot from a PMC-101 Double Density Diskette with 1024 byte sectors. ; ; Drive must be able to step at 6ms or faster. ; ; ; To Implement: ; SUBMIT LDR ; ; maclib z80 maclib cpm3 maclib ports maclib PMCequ extrn @m xtpa ; BIOS Jump vector. Loader: jmp boot ; initial entry on cold start ?wboot: jmp wboot ; reentry on program exit, warm start jmp const ; return console input status jmp conin ; return console input character jmp conout ; send console output character jmp list ; send list output character jmp auxout ; send auxilliary output character jmp auxin ; return auxilliary input character jmp home ; set disks to logical home jmp seldsk ; select disk drive, return disk parameter info jmp settrk ; set disk track jmp setsec ; set disk sector jmp setdma ; set disk I/O memory address jmp read ; read physical block(s) jmp write ; write physical block(s) jmp listst ; return list device status jmp sectrn ; translate logical to physical sector jmp conost ; return console output status jmp auxist ; return aux input status jmp auxost ; return aux output status jmp devtbl ; return address of device def table jmp cinit ; change baud rate of device jmp getdrv ; return address of disk drive table jmp multio ; set multiple record count for disk I/O jmp flush ; flush BIOS maintained disk caching jmp move ; block move memory to memory jmp time ; Signal Time and Date operation jmp bnksel ; select bank for code execution and default DMA jmp setbnk ; select different bank for disk I/O DMA operations. jmp xmove ; set source and destination banks for one operation jmp 0 ; reserved for future expansion jmp 0 ; reserved for future expansion jmp 0 ; reserved for future expansion boot: DI mvi a,JMP sta 0 sta 5 ; set up jumps in page zero lxi h,?wboot shld 1 ; BIOS warm start entry lhld @MXTPA shld 6 ; BDOS system call entry ret conout: call conost ora a jrz conout mov a,c out p$TRM$data ret conost: in p$TRM$stat ani 4 ;check TBE mvi a,0 rz ori -1 ret seldsk: lxi h,dph0 ;force drive A ret home: call restore lxi b,0 ; same as set track zero settrk: mov l,c mov h,b shld @trk ret setsec: mov l,c  mov h,b shld @sect ret setdma: mov l,c mov h,b shld @dma ret sectrn: mov l,c mov h,b mov a,d ora e rz xchg dad b mov l,m mvi h,0 ret read: mvi a,RDCmd sta dskcmd lxi h,oldtrk mov a,m out p$fdtrack ;put cur Trk for this Drv back in tk reg lxi h,dskcmd lda @sect ;get desired Sector cpi sctcnt+1 ;see if <=physical Sec/Trk res SIDbit,m ;preset for for yes (side0 in 1797cmnd) jrc RWe$0 ;skip if yes setb SIDbit,m ;else set Side 1 bit in 1797 cmnd RWe$0: call SelDrv ;Select & check for Disk RWe$1: xra A ;clear retry count sta RtyCnt RWe$2: lxi h,oldtrk lda @sect cpi sctcnt+1 ;see if <= to physical Sec/Trk jrc side0 ;if so skip sui sctcnt ;else cnvrt Sec 6 thru 10 to 01 thru 05 side0: out p$fdsector ;set Sector mvi a,0FFH ;if Drv not previously Selected cmp m jz RWd$1 ;then do a home & go back to RWe$2 lda @trk ;else get desired track cmp m ;see if =current track jrz noSek ;if so skip seek out p$fddata ;else output track to data port mov m,a call f$seek noSek: call f$force mvi C,p$fddata lhld @dma lda dskcmd di out p$fdcmnd call Delay RDent: in p$fdcmnd bit 1,A ;check DRQ jrz noDRQ1 ini noDRQ1: bit 0,A ;check busy jnz RDent RWdon: ei ani 1CH ;mask errors rz lxi h,RtyCnt inr m ;up retry count mov a,m cpi Retries ;see if max jrz MaxRty ;if so set to NZ and ret RWd$1: call restore jmp RWe$2 ;else home & reseek MaxRty: mvi a,1 ret ;************** SelDrv: in p$fdcmnd ;check FOR TIMEOUT rlc push psw ;C=not READY lda selmsk ;reSelect Drv out p$select pop psw rnc mvi a,Seldly call Delay2 DSKin?: in p$fdcmnd rrc jrc DSKin? ;loop until not busy call f$force ani 00000010B ;check index mov D,A ;save index status mvi H,4EH ;set counter din$2: dcx h ;drop counter mov a,H ora L jrz DSKin? ;if counter expires try again in p$fdcmnd ani 00000010B ;check index cmp D ;compare it to last index status mov D,A ;save new status jrz din$2 ;loop back if equal ret ;********** f$force: mvi a,frcCmd out p$fdcmnd call Delay in p$fddata in p$fdcmnd mvi a,frcCmd out p$fdcmnd call Delay in p$fdcmnd ret ;********** f$seek: ora A jrz restore out p$fddata ;else output track to p$fddata mvi a,sekCmd ;seek command out p$fdcmnd ;output to p$fdcmnd call Delay sk$1: in p$fdcmnd rrc ;check busy jrc sk$1 mvi a,Sekdly ;Wait for STEP to settle call Delay2 ;18ms ret ;********** restore: call f$force BIT 7,A jrnz restore call f$force mvi a,homCmd out p$fdcmnd wait3: call Delay in p$fdcmnd bit 0,a jrnz wait3 lxi h,oldtrk mvi m,0 ;UpDate Track# ret ;********** Delay: push b ;44us lxi b,5 USRdly: dcx b mov a,B ora C jrnz USRdly pop b ret ;********** Delay2: push d ;4945.25us*A+14us push b mov C,A D12$1: lxi d,0760 D12$2: dcx d mov a,E ora D jrnz D12$2 dcr C jrnz D12$1 pop b pop d ret getdrv: lxi h,@dtbl ret  move: xchg ; we are passed source in DE and dest in HL ldir ; use Z80 block move instruction xchg ; need next addresses in same regs ret wboot: ;Non implemented routines const: conin: list: auxout: auxin: write: listst: auxist: auxost: devtbl: cinit: multio: flush: time: bnksel: setbnk: xmove: f$init: f$login: xra a ret ; return with no error ;************************************************************************** @dtbl dw dph0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ddtrans db 1,2,3,4,5,6,7,8,9,10 dph0 dph ddtrans,dpbddds,32,51 dpbddds dpb 1024,10,40,2048,128,1 @trk ds 2 ; current track number @sect ds 2 ; current sector number @dma ds 2 ; current DMA address selmsk: db drvAon ; current drive select code RtyCnt: db retries ;disk retry count oldtrk: db -1 dskcmd: db RDcmd ; current wd1797 command max$len equ 600h ;max permissable length of LDRBIOS ; Max$len = ; (sector length*(sector qty-1))-length of CPMLDR.REL ; Length of CPMLDR.IMG should = 1000h ds max$len-($-Loader) ;create dummy filler to pad Trk0.img ; so CCP.img will merge to proper ; location. end  Trans2: db 1,2,3,4,5 ;Side 0 db 6,7,8,9,10 ;Side 1 ds trans$length-($-Trans2) Trans3: db 1,2,3,4,5 ;Side 0 db 6,7,8,9,10 ;Side 1 ds trans$length-($-Trans3) ; Variable Storage @type ds 1 ; currently selected format type @adrv ds 1 ; currently selected disk drive @rdrv ds 1 ; controller relative disk drive @trk ds 2 ; current track number @sect ds 2 ; current sector number @dma ds 2 ; current DMA address @dbnk db 0 ; bank for DMA operations ; Disk Error message drive$msg db cr,lf,bell,'Error on ',0 track$msg db ': T-',0 sector$msg db ', S-',0 table10: dw -1000,-100,-10,-1,0 ;Hex to Dec table end  title 'BIOS for CP/M 3.0 & PMC-101' ; Copyright (C), 1982,83 ; ; Digital Research, Inc Personal Micro Computers, Inc. ; P.O. Box 579 475 Ellis St. ;Pacific Grove, CA 93950 Mountain View, CA 94304 ; ; version 1.0 15 Sept 82 version 3.0 6 June 1983 ; To generate a new copy of CPM3.SYS insert a COPY of the SOURCE disk into ; the A drive. Press the reset buton. When the ' A> ' prompt appears type ; SUBMIT BIOS. This will automatically execute all the necessary ; commands to generate a new CPM3.SYS file. When execution is ; completed press the reset button to load the new operating system. ; ; ***************************************************** ; * * ; * NOTE: * ; * * ; * DO NOT MODIFY ANY CODE IN THIS MODULE * ; * * ; * PMC CANNOT SUPPORT ANY MODIFICATIONS * ; * * ; ***************************************************** ; ; This module contains BIOSKRNL, MOVE, CHARIO, BOOT, DRVTBL ;ONLY USE ODD NUMBERED BANKS WHEN SETTING UP THE SEGMENT TABLES WITH GENCPM. ; bank number 00 is used for the system bank. ; bank number 01 is used for the TPA (bank 1) ; bank number 03 is used for the CCP stored in bank 2 ; bank number 07 is used for bank 2 ; **************************************************** maclib z80 maclib ports maclib modebaud maclib PMCequ public @adrv,@rdrv,@trk,@sect,@dma,@cbnk,@dbnk,@type public pmsg,pderr,?const,?conin,?conout extrn f$write, f$read, f$login, f$init extrn @covec,@civec,@aovec,@aivec,@lovec,@mxtpa,@bnkbf,@sec,@date ;********************** Cseg Code ******************************************** cseg ; GENCPM puts CSEG stuff in common memory jmp boot ; initial entry on cold start ?wboot: jmp wboot ; reentry on program exit, warm start ?const: jmp const ; return console input status ?conin: jmp conin ; return console input character ?conout:jmp conout ; send console output character jmp list ; send list output character jmp auxout ; send auxilliary output character jmp auxin ; return auxilliary input character jmp home ; set disks to logical home jmp seldsk ; select disk drive, return disk parameter info jmp settrk ; set disk track jmp setsec ; set disk sector jmp setdma ; set disk I/O memory address jmp read ; read physical block(s) jmp write ; write physical block(s) jmp listst ; return list device status jmp sectrn ; translate logical to physical sector jmp conost ; return console output status jmp auxist ; return aux input status jmp auxost ; return aux output status jmp devtbl ; return address of device def table jmp cinit ; change baud rate of device jmp getdrv ; return address of disk drive table jmp multio ; set multiple record count for disk I/O   jmp flush ; flush BIOS maintained disk caching jmp move ; block move memory to memory jmp time ; Signal Time and Date operation ?bnksl: jmp bnksel ; select bank for code execution and default DMA jmp setbnk ; select different bank for disk I/O DMA operations. jmp xmove ; set source and destination banks for one operation jmp 0 ; reserved for future expansion +5A jmp 0 ; reserved for future expansion +5D jmp 0 ; reserved for future expansion +60 jmp 0 ; reserved by PMC +63 jmp 0 ; reserved by PMC +66 jmp 0 ; reserved by PMC +69 jmp 0 ; reserved by PMC +6C db 0C4h ; Do Not Change +6f ;***************** ; Interrupt Vectors ;***************** INTvec: CTCvec: DW i$rtc,i$ctc1,i$index,i$ctc3 ;***************** ; Interrupt Routines ;***************** i$rtc: ;CTC ch0 REAL TIME CLOCK di sspd RTCstk ;interrupts every 16.384ms lxi sp,RTCstk push psw push b push d push h lxi h,Frac inr m mvi a,maxFrc cmp m jrnz rtc$ext mvi m,0 mvi b,3 lxi h,timtbl lxi d,@sec rtc$1: ldax d inr a daa stax d cmp m ;compare to MAX value from table jrnz rtc$ext ;if not Max then skip mov a,b ;see if Day would be next dcr a xchg mvi m,0 ;preset current to 0 jrnz rtc$2 ; mvi m,1 ;if hours set current to 1 push h lhld @date ;and up date inx h shld @date pop h rtc$2: xchg inx h dcx d djnz rtc$1 rtc$ext:pop h pop d pop b pop psw lspd RTCstk ei reti i$ctc1: ;CTC ch1 RESERVED reti ;reserved for bus port i$index: ;CTC ch2 INDEX PULSE di push psw ;use 1 level of user stack mvi a,0000$0011B ;reset out p$index xra a out p$select ;deselect all drives pop psw ei reti i$ctc3: ;CTC channel 3 ; di ;sample entry & exit code for ; sspd CTC3stk ;user available CTC interrupts ; lxi sp,CTC3stk ; push psw ; push b ; push d ; push h ; ;user code goes here ; pop h ; pop d ; pop b ; pop psw ; lspd CTC3stk ; ei reti ; ds 16 ; stack space ;CTC3stk: ds 2 ; storage for SP on entry to i$CTC3 ;***************** ; Warm boot ;***************** wboot: lxi sp,boot$stack boot$1: mvi a,JMP sta 0 sta 5 ; set up jumps in page zero lxi h,?wboot shld 1 ; BIOS warm start entry lhld @MXTPA shld 6 ; BDOS system call entry mvi a,ccp$bank call ?bnksl ; select extra bank lxi d,0100h ; copy CCP to bank 3 for reloading lxi b,ccp$length lxi h,ccp$ld$adr ldir mvi a,tpa$bank call ?bnksl ; activate TPA bank jmp ccp ;***************** ; Character Init ;***************** cinit: mov a,c cpi max$devices jrz cent$init rnc ; invalid device or no init required for parll ser$init: mov l,c mvi h,0 ; make 16 bits from device number dad h dad h dad h ; *8 lxi d,@ctbl+7 dad d mov a,m ;DRI's baud table does not match ours cpi 10 ;if the baud rate is 9 or less then jrnc no$change ;we need to drop it down 1 rate to dcr a ;compensate for our 2000 baud rate no$change: ;which they do not support mov b,a mov a,c ;get device numer ora a jrz chA$baud ;if A ch in p$getbaud ;read baud ani 0F0H ;mask out old B ch jr set$bd chA$baud: mov a,b ;move baud bits to hi nibbble rlc rlc rlc rlc mov b,a ;save back to b in p$getbaud ;read old baud ani 0FH ;mask out old A ch set$bd: ora b ;or in new baud di out p$baud ;set it ei ret ;***************** cent$init: ret ;***************** ; Character output ;***************** conout: lhld @covec ; fetch console output bit vector jr out$scan auxout: lhld @aovec ; fetch aux output bit vector jr out$scan list: lhld @lovec ; fetch list output bit vector out$scan: mvi b,0 ; start with device 15 co$next:dad h ; shift out next bit jrnc not$out$device push h ; save the vector push b ; save the count and character not$out$ready: call coster ora a jrz not$out$ready pop b push b ; restore and resave the character and device call ?co ; if device selected, print it pop b ; recover count and character pop h ; recover the rest of the vector not$out$device: inr b ; next device number mov a,h ora l ; see if any devices left jrnz co$next ; and go find them... ret ;***************** ?co: ; character output mov a,b cpi max$devices jrz centronics$out jrnc null$output mov a,c push psw ; save character from push b ; save device number co$spin: mov a,b call ?cost jrz co$spin ; wait for TxEmpty pop h mov l,h mvi h,0 ; get device number in lxi d,data$ports dad d ; make address of port address mov c,m ; get port address pop psw outp a ; send data null$output: ret ;***************** centronics$out: in p$centstat ani 1111$0000b ;mask off spurious bits cpi centronics$mask ;check Busy, Empty, Selected & Fault jrnz centronics$out mov a,c out p$centdata ; give printer data ret ;***************** ; Character Output Status ;***************** conost: lhld @covec ; get console output bit vector jr ost$sca n auxost: lhld @aovec ; get aux output bit vector jr ost$scan listst: lhld @lovec ; get list output bit vector ost$scan: mvi b,0 ; start with device 0 cos$next: dad h ; check next bit push h ; save the vector push b ; save the count mvi a,-1 ; assume device ready cc coster ; check status for this device pop b ; recover count pop h ; recover bit vector ora a ; see if device ready rz ; if any not ready, return false inr b ; drop device number mov a,h ora l ; see if any more selected devices jrnz cos$next ori -1 ; all selected were ready, return true ret ;***************** ?cost: ; character output status mov a,b cpi max$devices jrz cent$stat jrnc null$status mov l,b mvi h,0 lxi d,data$ports dad d mov c,m inr c inr c if CTS$protocol mvi a,0001$0000b ;reset Ext. status outp a inp a ; get output status ani 0010$0000b ; test CTS rz endif if DSR$protocol mvi a,0001$0000b ;reset Ext. status outp a inp a ; get output status ani 0001$0000b ; test RI (DSR) rz endif inp a ; get output status ani 0000$0100b ; test transmitter empty rz ; ret false if not ready ori -1 ret ; return true if ready ;***************** cent$stat: in p$centstat cma ani 1111$0000b cpi centronics$mask rz ori -1 ret ;***************** ; Character Input Status ;***************** const: lhld @civec ; get console input bit vector jr ist$scan auxist: lhld @aivec ; get aux input bit vector ist$scan: mvi b,0 ; start with device 0 cis$next: dad h ; check next bit mvi a,0 ; assume device not ready cc cist1 ; check status for this device ora a rnz ; if any ready, return true inr b ; drop device number mov a,h ora l ; see if any more selected devices jrnz cis$next xra a ; all selected were not ready, return false ret ;***************** cist1: ; get input status with and saved push b push h call ?cist pop h pop b ora a ret ;***************** ?cist: ; character input status mov a,b cpi max$devices jrnc null$status ; can't read from centronics mov l,b mvi h,0 ; make device number 16 bits lxi d,data$ports dad d ; make pointer to port address mov c,m inr c ; get DART status port inr c inp a ; read from status port ani 1 ; isolate RxRdy rz ; return with zero no char ori -1 ret ;***************** null$status: xra a ret ;***************** ; Character Input ;***************** conin: lhld @civec jr in$scan auxin: lhld @aivec in$scan:push h ; save bit vector mvi b,0 ci$next:dad h ; shift out next bit mvi a,0 ; insure zero a (nonexistant device not ready) cc cist1 ; see if the device has a character ora a jrnz ci$rdy ; this device has a character inr b ; else, next device mov a,h ora l ; see if any more devices jrnz ci$next ; go look at them pop h ; recover bit vector jr in$scan ; loop til we find a character ci$rdy: pop h ; discard extra stack ?ci: mov a,b ; character input cpi max$devices jrnc null$input ; can't read from centronics cir1: mov a,b call ?cist jrz cir1 ; wait for character ready dcr c dcr c inp a ; get data if parity$mask ani 7Fh ; mask parity endif ret ;***************** null$input: mvi a,1Ah ; return a ctl-Z for no device ret ;***************** coster: ; check for output device ready, including ; optional xon/xoff support mov l,b mvi h,0 ; make device code 16 bits push h ; save it in stack dad h dad h dad h ; create offset into device characteristics tbl lxi d,@ctbl+6 dad d ; make address of mode byte mov a,m ani mb$xonxoff pop h ; recover console number in jz ?cost ; not a xon device, go get output status direct lxi d,xofflist dad d ; make pointer to proper xon/xoff flag call cist1 ; see if this keyboard has character mov a,m cnz ci1 ; get flag or read key if any cpi ctlq jrnz not$q ; if its a ctl-Q, mvi a,-1 ; set the flag ready not$q: cpi ctls jrnz not$s ; if its a ctl-S, mvi a,00h ; clear the flag not$s: mov m,a ; save the flag call cost1 ; get the actual output status, ana m ; and mask with ctl-Q/ctl-S flag ret ; return this as the status ;***************** ci1: ; get input, saving & push b push h call ?ci pop h pop b ret ;***************** cost1: ; get output status, saving & push b push h call ?cost pop h pop b ora a ret ;***************** ; Get Device Table adr ;***************** devtbl: lxi h,@ctbl ret ;***************** ; Get Drive Table adr ;***************** getdrv: lxi h,@dtbl ;get Drive table adr ret ;***************** ; Set/Get Time ;***************** time: mov a,c ora a ;0= get time -1= set time rz ;RTC updates SCB directly no need to get time set$time: ;Set time activates Clock, Time already in SCB mvi a,1010$0111b ;set CTC ch0 command to: di ; Int enable,  Timer mode, prescaler 256 out p$rtc ; auto trigger,load count next & reset mvi a,RTCcnt ;set CTC ch0 time count to 252 out p$rtc ; time = 250ns*256presc*252Cnt=16.128ms ei ret ;***************** ; Inter bank Block Move ;***************** xmove: ; C= src bank B= dest bank sbcd src$bnk ;save banks ori -1 ;set xmove pending flag sta xmv$flg ret ;***************** ; Intra bank Block Move ;***************** move: lda xmv$flg ; check xmove pending flag ora a jrnz exmve ;if set do an extended move else xchg ; we are passed source in DE and dest in HL, len in BC ldir ; use Z80 block move instruction xchg ; need next addresses in same regs ret exmve: xra a sta xmv$flg ;clear xmove flag lda @cbnk push psw ;save current bank xchg ;HL=src DE=dest lda src$bnk call bank ;set source bank push d ;save dest aadr push b ;save length lxi d,buffer ldir ;src->buffer pop b ;restore length pop d ;restore destination adr lda dst$bnk call bank ;set destination bank push h ;save end of source adr lxi h,buffer ldir ;buffer ->dst pop h ;restore source adr end xchg pop psw ;restore current bank fall through to bnksel: sta @cbnk ; remember current bank bank: ora a jrz bank1 ;skip if bank 0 else ori 80h ;set hibit to activate bank select bank1: out p$bankselect ; put new memory control byte ret ;***************** ; Utility Subroutines ;***************** ; none ;********************** Cseg Data ******************************************** ; Drive Table ;All four dph's must be set for GENCPM to allocated the necessary buffers @dtbl dw dph0,dph1,dph2,dph3 ;Drives 1-4 dw 0,0,0,0,0,0,0,0,0,0,0,0 ;drives E-P cannot exist ; Device Table @ctbl: ;Channel A must always be first item in table db 'TERMNL' ; device 0[8000], DART ch A db mb$in$out+mb$serial+mb$softbaud @Abaud: ds 1 ;set by boot: ;Channel B must always be second item in table db 'MODEM ' ; device 1[4000], DART ch B db mb$in$out+mb$serial+mb$softbaud @Bbaud: ds 1 ;set by boot: ;Other Devices ahould be inserted here ;Centronics must always be last item in table db 'CENTRN' ; device 3[1000], Centronics parallel printer db mb$output db baud$none db 0 ; Disk Parameter Blocks dpb0: ; Double Density Double Sided for PMC-101 1024 dw 80 ; SPT 128 BYTE RECORDS PER TRACK db 4,15,1 ; BSH,BLM,EXM BLOCK SHIFT AND MSK, EXTENT MSK dw 194,127 ; DSM,DRM MAX BLOCK #, MAX DIR ENTRY # db 192,0 ; AL0,AL1 ALLOC VEC f/DIR dw 32,1 ; CKS,OFF CHECKSUM SIZ, OFFSET f/SYS TRK db 3,7 ; PSH,PHM PHYSICAL SECTOR SIZE SHIFT db 'A' ; CONVERT TYPE PMC extension dpb1: ; Double Density Double Sided for PMC-101 1024 dw 80 ; SPT db 4,15,1 ; BSH,BLM,EXM dw 194,127 ; DSM,DRM db 192,0 ; AL0,AL1 dw 32,1 ; CKS,OFF db 3,7 ; PSH,PHM db 'A' ; CONVERT TYPE PMC extension dpb2: ; Double Density Double Sided for PMC-101 1024 dw 80 ; SPT db 4,15,1 ; BSH,BLM,EXM dw 194,127 ; DSM,DRM db 192,0 ; AL0,AL1 dw 32,1 ; CKS,OFF db 3,7 ; PSH,PHM db 'A' ; CONVERT TYPE PMC extension dpb3: ; Double Density Double Sided for PMC-101 1024 dw 80 ; SPT db 4,15,1 ; BSH,BLM,EXM dw 194,127 ; DSM,DRM db 192,0 ; AL0,AL1 dw 32,1 ; CKS,OFF db 3,7 ; PSH,PHM db 'A' ; CONVERT TYPE PMC extension ; Misc storage data$ports: db p$TRM$data, p$MDM$data ; serial base ports src$bnk: db 0 ;source bank f/xmove DO NOT dst$bnk: db 0 ;dest " " CHANGE ORDER xmv$flg: db 0 ;xmove flag buffer: ds 128 ;xmove buffer @cbnk db 0 ; bank for processor operations Frac: db 00 ;Fractions of Seconds for RTC TimTbl: db 60h,60h,24h ;Max Seconds,Minutes,Hours xofflist rept max$devices ; ctl-s clears to zero db -1 endm ; Stack space allocation ds 18 ;RTC Int stack space RTCstk: ds 2 ;storage for SP on entry to RTC ds 4 ;boot&wboot stack space boot$stack equ $ ;********************** Dseg Code ******************************************** dseg ; this part is banked ;***************** ; Select Disk ;***************** seldsk: mov a,c sta @adrv ; save drive select code mov l,c mvi h,0 dad h ; create index from drive code lxi b,@dtbl dad b ; get pointer to dispatch table mov a,m inx h mov h,m mov l,a ; point at disk descriptor ora h rz mov a,e ani 1 jrnz not$first$select push h xchg lxi h,-2 dad d mov a,m sta @rdrv lxi h,-6 dad d mov a,m inx h mov h,m mov l,a call ipchl pop h not$first$select: ret ;***************** ; Home Disk ;***************** home: lxi b,0 ; same as set track zero ;***************** ; Set Desired Track ;***************** settrk: mov l,c mov h,b shld @trk ret ;***************** ; Set Desired Sector ;***************** setsec: mov l,c mov h,b shld @sect ret ;***************** ; Set Desired DMA adr ;***************** setdma: mov l,c mov h,b shld @dma lda @cbnk ; default DM A bank is current bank setbnk: sta @dbnk ret ;***************** ; Logical to physical sector translation ;***************** sectrn: mov l,c mov h,b mov a,d ora e rz xchg dad b mov l,m mvi h,0 ret ;***************** ; Read sector ;***************** read: lhld @adrv mvi h,0 dad h ; get drive code and double it lxi d,@dtbl dad d ; make address of table entry mov a,m inx h mov h,m mov l,a ; fetch table entry push h ; save address of table lxi d,-8 dad d jr rw$common ; use common code ;***************** ; write sector ;***************** write: lhld @adrv mvi h,0 dad h ; get drive code and double it lxi d,@dtbl dad d ; make address of table entry mov a,m inx h mov h,m mov l,a ; fetch table entry push h ; save address of table lxi d,-10 dad d rw$common: mov a,m inx h mov h,m mov l,a ; get address of routine pop d ; recover address of table dcx d ; point to drive type ldax d sta @type  ; post drive type dcx d ; point to relative drive ldax d sta @rdrv ; get relative drive code and post it inx d inx d ; point to DPH again ipchl: pchl ; leap to driver ;***************** ; Multiple Sector I/O ; & ; Flush buffers ;***************** multio: ;not implemented xra a ret flush: ;not implemented xra a ret ;***************** ; Print message to terminal ;***************** pmsg: ; print msg pointed to by push b ; until a null is found push d ; saves & pmsg$loop: mov a,m ora a jrz pmsg$exit mov c,a push h call ?conout pop h inx h jr pmsg$loop pmsg$exit: pop d pop b ret ;***************** ; Print Disk error message ;***************** pderr: lxi h,drive$msg call pmsg ; error header lda @adrv adi 'A' mov c,a call ?conout ; drive code lxi h,track$msg call pmsg ; track header lhld @trk call pdec ; track number lxi h,sector$msg call pmsg ; sector header lhld @sect pdec: ; Convert HL to decimal and print (0->65535) lxi b,table10 lxi d,-10000 next: mvi a,'0'-1 pdecl: push h inr a dad d jrnc stoploop inx sp inx sp jr pdecl stoploop: push d push b mov c,a call ?conout pop b pop d nextdigit: pop h ldax b mov e,a inx b ldax b mov d,a inx b mov a,e ora d jrnz next ret ;********************** Dseg Data ******************************************** ; Disk Parameter Headers xdph0: dw f$write ; Write vector dw f$read ; Read Vector dw f$login ; Login vector dw f$init ; Init vector db 0 ; UNIT ->@rdrv db PMC101d ; TYPE dph0: dw Trans0 ; XLT Translate Table Address db 0,0,0,0,0,0,0,0,0 ; -0- BDOS scratch area db 0 ; MF Media Flag dw dpb0 ; DPB Disk Parameter Block dw ck0 ; CSV Checksum Vector dw al0 ; ALV Allocation Vector dw 0FFFEh ; DIRBCB Directory Buffer Control Block Vector dw 0FFFEh ; DTABCB Data Buffer Control Block Vector dw 0FFFEh ; HASH Hash Table Vector  db 0 ; HBANK Hash Bank xdph1: dw f$write,f$read,f$login,f$init db 1,PMC101d dph1: dw Trans1 db 0,0,0,0,0,0,0,0,0,0 dw dpb1,ck1,al1,0FFFEh,0FFFEh,0FFFEh db 0 xdph2: dw f$write,f$read,f$login,f$init db 2,PMC101d dph2: dw Trans2 db 0,0,0,0,0,0,0,0,0,0 dw dpb2,ck2,al2,0FFFEh,0FFFEh,0FFFEh db 0 xdph3: dw f$write,f$read,f$login,f$init db 3,PMC101d dph3: dw Trans3 db 0,0,0,0,0,0,0,0,0,0 dw dpb3,ck3,al3,0FFFEh,0FFFEh,0FFFEh db 0 ;***************************** ; OVERLAY: Since BOOT is only called once the Boot code is overlayed by ; buffer space allocated to CKS & ALL. overlay$1: ;Define addresses of buffers ;Set buffer size to largest needed by any drive in 'CONVERT' ck0 equ overlay1 ; CHECKSUM VECTOR DRM+1/4 ck1 equ ck0+48 ck2 equ ck1+48 ;set for max Directory entries in CONVERT ck3 equ ck2+48 al0 equ ck3+48 ; ALLOCATION VECTOR DSM/4+2 al1 equ al0+65 al2 equ al1+65 ;set for max required in CONVERT al3 equ al2+65 next$adr equ al3+65  ;***************** ; Cold Boot ;***************** boot: di ;BOOT ROM & CPMLDR leave us in di mode lxi sp,boot$stack lxi h,0 ;clear drives 2,3,4 from drive table shld @dtbl+2 ; (they must be present for GENCPM to allocate shld @dtbl+4 ; the proper buffers) shld @dtbl+6 ldai ; I reg contains drive quantity (from BOOT ROM) dcr a ; Drop count jrz no$more$drives ; if 0 then drive B is not present lxi h,dph1 ;else set dph adr into drive table shld @dtbl+2 dcr a ; Drop count jrz no$more$drives ; if 0 then drive C is not present lxi h,dph2 ;else set dph adr into drive table shld @dtbl+4 dcr a ; Drop count jrz no$more$drives ; if 0 then drive D is not present lxi h,dph3 ;else set dph adr into drive table shld @dtbl+6 no$more$drives ;BOOT ROM sets Baud rate, so we ; set current Baud Rates into @ctbl in p$getbaud ;read current baud rates mov c,a ;save in c ani 0fh ;mask off unwanted bits cpi 10 ;if the baud rate is 9 or  less then jrnc no$change1 ;we need to up it 1 rate to inr a ;compensate for our 2000 baud rate no$change1: ;which they do not support sta @Bbaud ;save in B channel baud slot of Char table mov a,c ;restore baud rrc ;move A chan bits to Lo nibble rrc rrc rrc ani 0fh ;mask off unwanted bits cpi 10 ;if the baud rate is 9 or less then jrnc no$change2 ;we need to up it 1 rate to inr a ;compensate for our 2000 baud rate no$change2: ;which they do not support sta @Abaud ;save in A channel baud slot of Char table ; Next set up the Device Vectors ; Logical Physical Baud Prot- ; device device Rate ocol ; ;+-----------> dev 00 TERMNL 9600 ;|+----------> dev 01 MODEM 9600 ;||+---------> dev 02 CEN none ;|||+-++++-++++---> dev 03-11 ;|||| |||| |||| ++++-> reserved ;|||| |||| |||| |||| lxi h,08000h ; assign TERMNL to CON: shld @civec shld @covec lxi h,4000H ; assign MODEM to AUX: shld @aivec shld @aovec lxi h,2000H ; assign CEN to LPT: shld @lovec lxi h,INTvec ; Set I register with MSB of the Interrupt Vect mov a,h stai im2 ;Set IM 2 interrupt mode lxi h,CTCvec ;get CTC interrupt Vector mvi b,4 ;CTC channel quantity mvi c,p$rtc ;1st CTC ch mvi a,03 ;RESET command outp a ;reset channel 0 outp l ;set LSB of CTC Interrupt Vector into ch0 init$lp:inr c outp a ;reset all other channels djnz init$lp ei lxi h,signon$msg call pmsg ; print signon message jmp boot$1 ; back to Cseg code signon$msg db '128K PMC-101 CP/M 3.0 with extended Bios' db ' for MicroMate -Vers' db pgm,'.',vrs,'-',cr,lf,0 ; End of BOOT routine cannot exceed the length of the buffers! ; BOOT routine cannot do any Disk IO ;(length of buffers) - (length of BOOT) = size of space still to be defined ; for buffers ds (next$adr-overlay$1)-($-boot) ;***************** ; Translation Tables ; Each drive must have its own Trans table for 'CONVERT' ; Each table has a fixed length, set to largest used by 'CONVERT' Trans0: db 1,2,3,4,5 ;Side 0 db 6,7,8,9,10 ;Side 1 ds trans$length-($-Trans0) ; room for expansion Trans1: db 1,2,3,4,5 ;Side 0 db 6,7,8,9,10 ;Side 1 ds trans$length-($-Trans1) Trans2: db 1,2,3,4,5 ;Side 0 db 6,7,8,9,10 ;Side 1 ds trans$length-($-Trans2) Trans3: db 1,2,3,4,5 ;Side 0 db 6,7,8,9,10 ;Side 1 ds trans$length-($-Trans3) ; Variable Storage @type ds 1 ; currently selected format type @adrv ds 1 ; currently selected disk drive @rdrv ds 1 ; controller relative disk drive @trk ds 2 ; current track number @sect ds 2 ; current sector number @dma ds 2 ; current DMA address @dbnk db 0 ; bank for DMA operations ; Disk Error message drive$msg db cr,lf,bell,'Error on ',0 track$msg db ': T-',0 sector$msg db ', S-',0 table10: dw -1000,-100,-10,-1,0 ;Hex to Dec table end  title 'Disk I/O routines for CP/M 3.0 & PMC-101' ; ***************************************************** ; * * ; * NOTE: * ; * * ; * DO NOT MODIFY ANY CODE IN THIS MODULE * ; * * ; * PMC CANNOT SUPPORT ANY MODIFICATIONS * ; * * ; ***************************************************** ; 'DISKIO' ; ' Copyright (C), 1983 Personal Micro Computers, Inc.' ; ' 475 Ellis St. Mountain View, CA 94304' ; ' version 3.0 6 June 1983' maclib z80 maclib ports maclib PMCequ public f$read, f$write, f$login, f$init extrn @rdrv, @adrv, @dma, @dbnk, @trk, @sect, @ermde, @cbnk, @type extrn ?conin, ?const, ?conout, pderr, pmsg dseg ;******************** ; Initialization entry point. called for first time initialization. ; ;******************** f$init: ;******************** ; This entry is called when A logical drive is about to be logged into for ; the purpose of density determination. It may adjust the parameters contained ; IN the disk parameter header pointed at by ; ;******************** f$login: ret ;no initialization or login required ;******************** ; disk READ and WRITE entry points. ; these entries are called with the following arguments: ; relative drive number IN @rdrv (8 bits) ; absolute drive number IN @adrv (8 bits) ; disk transfer address IN @dma (16 bits) ; disk transfer bank IN @dbnk (8 bits) ; disk track address IN @trk (16 bits) ; disk sector address IN @sect (16 bits) ; pointer to XDPH IN ; they transfer the appropriate data, perform retries if necessary, ; then return an error code IN ;******************** f$read: lxi h,read$msg mvi a,RDcmd lxiy RDent ;IY->entry point jr f$rw$common f$write: lxi h,write$msg mvi a,WRcmd lxiy WRent f$rw$common: lxix Disk$command stx a,0 ;LD (IX+0),A save command shld operation$name ;save operation in error message lda @rdrv lxi h,track$table ;set HL to base of Track Table call adahl shld Trk$tbl$ptr ;Save HL pointing to current track mov a,m out p$fdtrack ;put cur Trk for this Drv back in tk reg mvi a,4 call adahl mov b,m ;b-> Select Value lda @sect ;save sector sta s$sect lda @trk ;save track sta s$trk lda @type ;check type mov c,a ani 0000$0011b ;mask TYPE bits lxi h,Type$tbl get$tbl: add a ;pointer *2 call adahl mov a,m ;get table entry inx h mov h,m mov l,a mov a,c pchl ;jump rw$DsSd: ;TYPE 1 setb DENbit,b ;set Single Density always jr Ds$Ent rw$DsDd: ;TYPE 0 res DENbit,b ;set Double Density always Ds$ent: rrc ;-0000$000 rrc ;--0000$00 mov c,a ani 0000$0011b ;mask SWITCH bits lxi h,switch$tbl jr get$tbl Sector$switch: rrc ;---0000$0 rrc ;----0000$ ani 0000$1111b ;mask COUNT bits adi 6 ;sectors range from 6 to 21 mov c,a lda s$sect ;get desired Sector cmp c ;see if <=physical Sec/Trk jrc set$S0 lxi h,s$sect change: dcr c sub c mov m,a jr set$S1 Track$switch: rrc ;---0000$0 rrc ;----0000$ mov c,a ani 0000$0011b ;mask COUNT bits lxi h,Trk$tbl call adahl mov a,c mov c,m rrc ;-----000 rrc ;------00 ani 0000$0001b ;mask side first bit ora a jrnz S1$first S0$first: lda s$trk ;get desired Track cmp c ;see if <=physical Trk/side jrc set$S0 lxi h,s$trk dcr c sub c mov m,a jr set$S1 S1$first: lda s$trk ;get desired Track cmp c ;see if <=physical Trk/side jrc set$S1 lxi h,s$trk dcr c sub c mov m,a jr set$S0 Odd$switch: lda s$trk ;get desired Track bit 0,a ;0=even=side 0 push psw rrc ;make side 1 same track # as side 0 ani 0111$1111b sta s$trk pop psw jrz set$S0 ;set side 0 if yes jr set$S1 ;else set side 1 Even$switch: lda s$trk ;get desired Track bit 0,a ;1=Odd=side 0 push psw rrc ;make side 1 same track # as side 0 ani 0111$1111b sta s$trk pop psw jrnz set$S0 ;set side 0 if yes set$S1: setx SIDbit,0 ;else set Side 1 bit in 1797 cmnd jr select$drive rw$SsDd: ;TYPE 2 res DENbit,b ;set Double Density always jr set$S0 rw$SsSd: ;TYPE 3 setb DENbit,b ;set Single Density always set$S0: resx SIDbit,0 ;set Side 0 always select$drive: call SelDrv ;Select & check for Disk Drive in B usr$rty: xra a ;clear retry count sta RtyCnt retry$lp: lda s$sect out p$fdsector ;set Sector lhld Trk$tbl$ptr ;get Track table pointer mvi a,-1 ;if Drv not previously Selected cmp m jz go$home ;then do a home & go back to retry$lp lda s$trk ;else get desired track cmp m ;see if =current track jrz noSek ;if so skip seek out p$fddata ;else output track to data port mov m,a ;save as current Trk call f$seek ;seek the track noSek: mvi C,p$fddata lhld @dma ;get DMA adr lda disk$command ;get command call execute ;in cseg, sets @dbnk,does I/O,set bank 0,ret sta disk$status ;save returned status lxi h,disk$command ;check command bit 6,m jrz wr$mask ;if command was a write use write error mask ani 0001$1111b ;else use read error mask jr save$error wr$mask: ani 0111$1111b ;mask write errors save$error: jrz RWexit ;return if no errors lxi h,RtyCnt inr m ;up retry count mov a,m cpi retries ;see if max jrz MaxRty ;if so set to NZ and ret go$home: call restore jr retry$lp ;else home & reseek MaxRty: lda @ermde ; suppress error message if BDOS is returning cpi -1 ; errors to application... jrz hard$error call pderr ; Had permanent error, print error message lhld operation$name call pmsg ; then, messages for all indicated error bits lda disk$status ; get status byte from last error lxi h,err$table ; point at table of message addresses errm1: mov e,m inx h mov d,m inx h ; get next message address add a push psw ; shift left and PUSH residual bits with status xchg cc pmsg xchg ; print message, saving table pointer pop psw jrnz errm1 ; if any more bits left, continue lxi h,err$msg call pmsg ; print ", retry (Y/N) ? " call u$conin$echo ; get operator response cpi 'Y' jrz usr$rty hard$error: ; otherwise, mvi a,1 RWexit: push psw mvi a,11000111B ;set CTC ch2 (Index Pulse Interrupt) for di ; Int enable, Counter mode, Load constant next out p$index ; & reset mvi a,IdxCnt ;set count out p$index ei pop psw ret cseg ;********** execute: ;must reside in cseg push psw lda @dbnk ;set DMA bank ora a jrz exec$1 dcr A ori 80H ;set hi bit if not bank 0 exec$1: out p$bankselect pop psw ;restore command di out p$fdcmnd call Delay ;command delay pciy ;********** RDent: in p$fdcmnd bit 1,A ;check DRQ jrz noDRQ1 ini noDRQ1: bit 0,A ;check busy jnz RDent jr RWdon WRent: in p$fdcmnd bit 1,A ;check DRQ jrz noDRQ2 outi noDRQ2: bit 0,A ;check busy jnz WRent RWdon: push psw ;save status xra a ;set bank 0 out p$bankselect pop psw ;restore status ei ret ;********** Delay: push b ;44us lxi b,5 USRdly: dcx b mov a,B ora C jrnz USRdly pop b ret ;******************** adahl: add l mov l,a rnc inr h ret dseg ;********** SelDrv: mvi a,00000011B ;reset Index Pulse interrupts di out p$index ei in p$fdcmnd ;check FOR TIMEOUT rlc push psw ;C=not READY mov a,b out p$select pop psw rnc mvi a,Seldly call Delay2 DSKin?: in p$fdcmnd rrc jrc DSKin? ;loop until not busy mvi a,FRCcmd out p$fdcmnd call Delay in p$fdcmnd ani 00000010B ;check index mov d,a ;save index status mvi h,78 ;set counter din$2: dcx h ;drop counter mov a,h ora l jrz DSKin? ;if counter expires try again in p$fdcmnd ani 00000010B ;check index cmp d ;compare it to last index status mov d,a ;save new status jrz din$2 ;loop back if equal ret ;********** f$seek: ora a jrz restore out p$fddata ;else output track to p$fddata mvi a,Sekcmd ;seek command out p$fdcmnd ;output to p$fdcmnd call Delay sk$1: in p$fdcmnd rrc ;check busy jrc sk$1 mvi a,Sekdly ;Wait for STEP to settle Delay2: push d ;4945$25us*A+14us push b mov c,a Dly2$1: lxi d,0760 Dly2$2: dcx d mov a,e ora d jrnz Dly2$2 dcr c jrnz Dly2$1 pop b pop d ret ;********** restore: mvi a,Homcmd out p$fdcmnd wait3: call Delay in p$fdcmnd bit 0,a jrnz wait3 lhld Trk$tbl$ptr mvi m,0 ;UpDate Track# ret ;******************** u$conin$echo: ; get console input, echo it, and shift to upper case call ?const ora a jrz u$c1 ; see if any char already struck call ?conin jr u$conin$echo ; yes, eat it and try again u$c1: call ?conin push psw mov c,a call ?conout pop psw ani 5fh ; make upper case ret ;******************** disk$command: ds 1 ; current wd1797 command disk$status: ds 1 ; last error status code for messages s$sect: ds 1 ; current physical sector s$trk: ds 1 ; current physical track RtyCnt: db retries ;disk retry count Trk$tbl$ptr: dw track$table ;Pointer to current track$table entry track$table: DB -1 ;Current Track Table A KEEP ORDER DB -1 ; B DB -1 ; C DB -1 ; D sel$table: DB DrvAon ;drive#+motor on bit A KEEP ORDER DB DrvBon ; B DB DrvCon ; C DB DrvDon ; D Type$tbl: dw rw$DsDd ;type 0 DsDd 00 dw rw$DsSd ;type 1 DsSd 01 dw rw$SsDd ;type 2 SsDd 01 dw rw$SsSd ;type 3 SsSd 00 switch$tbl: dw Sector$switch ;switch on sector count 00 dw Track$switch ;switch on track count 01 dw Odd$switch ;switch on Odd track 10 dw Even$switch ;switch on even track 11 Trk$tbl: db 34,36,41,81 ;track# to switch on 00,01,10,11 ;******************** read$msg: DB ', Read',0 ; error message components write$msg: DB ', Write',0 operation$name: DW read$msg err$msg: DB ' retry (Y/N) ? ',0 ;******************** err$table: DW b7$msg ; table of pointers to error message strings first DW b6$msg ; entry is for bit 7 of 1797 status byte DW b5$msg DW b4$msg DW b3$msg DW b2$msg DW b1$msg DW b0$msg b7$msg: DB ' RDY,',0 b6$msg: DB ' WP,',0 b5$msg: DB ' FLT,',0 b4$msg: DB ' RNF,',0 b3$msg: DB ' CRC,',0 b2$msg: DB ' LD,',0 b1$msg: DB ' DREQ,',0 b0$msg: DB ' BSY,',0 end ; DTR on, 8 data bits, Tx enable, RTS on db 2 ; register 2 db 0111$0000b ; Interrupt Vector db -1,-1,-1,-1 ds 3ffh-($-Execute) last: db 00 ;Last byte end  ds 2 ; current sector number @dma ds 2 ; current DMA address @dbnk db 0 ; bank for DMA operations ; Disk Error message drive$msg db cr,lf,bell,'Error on ',0 track$msg db ': T-',0 sector$msg db ', S-',0 table10: dw -1000,-100,-10,-1,0 ;Hex to Dec table end  ; CALLVERS program bdos equ 5 ; entry point for BDOS prtstr equ 9 ; print string function vers equ 12 ; get version function cr equ 0dh ; carriage return lf equ 0ah ; line feed org 100h mvi d,5 ; Perform 5 times loop: push d ; save counter mvi c,prtstr lxi d,call$msg ; print call message call bdos mvi c,vers call bdos ; try to get version # ; CALLVERS will intercept mov a,l sta curvers pop d dcr d ; decrement counter jnz loop mvi c,0 jmp bdos call$msg: db cr,lf,'**** CALLVERS **** $' curvers db 0 end lect ; put new memory control byte pop b ; restore register b ret ; 128 bytes at a time end ID Syntax: SID {pgm-filespec} {,sym-filespec} Explanation: The SID symbolic debugger allows you to monitor and test programs developed for the 8080 microprocessor. SID supports real-time breakpoints, fully mo ; ECHOVERS RSX pstring equ 9 ; string print function cr equ 0dh lf equ 0ah ; ; RSX PREFIX STRUCTURE ; db 0,0,0,0,0,0 ; room for serial number jmp ftest ; begin of program next db 0c3H ; jump dw 0 ; next module in line prev: dw 0 ; previous module remov: db 0ffh ; remove flag set nonbnk: db 0 db 'ECHOVERS' space: ds 3 ftest: ; is this function 12? mov a,c cpi 12 jz begin ; yes - intercept jmp next ; some other function begin: lxi h,0 dad sp ;save stack shld ret$stack lxi sp,loc$stack mvi c,pstring lxi d,test$msg ; print message call next ; call BDOS lhld ret$stack ; restore user stack sphl lxi h,0031h ; return version number = 0031h ret test$msg: db cr,lf,'**** ECHOVERS **** $' ret$stack: dw 0 ds 32 ; 16 level stack loc$stack: end l stack stktop: ; end ; Dump program, reads input file and displays hex data ; org 100h bdos equ 0005h ;dos entry point cons equ 1 ;read console typef equ 2 ;type function printf equ 9 ;buffer print entry brkf equ 11 ;break key function (true if char ready) openf equ 15 ;file open readf equ 20 ;read function ; fcb equ 5ch ;file control block address buff equ 80h ;input disk buffer address ; ; 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) fcbcr equ fcb+32 ;current (next) record number (0 to 127) fcbln equ fcb+33 ;fcb length ; ; 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 ; 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 err 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 character ready rrc ;into carry jc finis ;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 ; finis: ; end of dump 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 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: ;print hex char in reg a push psw rrc rrc rrc rrc call pnib ;print nibble pop psw call pnib ret ; err: ;print error message ; d,e addresses message ending with "$" mvi c,printf ;print buffer function call 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 buffer 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 fcbcr ;clear current record ; lxi d,fcb mvi c,openf 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 'file dump version 2.0$' 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 ;*************************************************** ;* * ;* sample random access program for cp/m 3 * ;* * ;*************************************************** org 100h ;base of tpa ; reboot equ 0000h ;system reboot bdos equ 0005h ;bdos entry point ; coninp equ 1 ;console input function conout equ 2 ;console output function pstring equ 9 ;print string until '$' rstring equ 10 ;read console buffer version equ 12 ;return version number openf equ 15 ;file open function closef equ 16 ;close function makef equ 22 ;make file function readr equ 33 ;read random writer equ 34 ;write random wrtrzf equ 40 ;write random zero fill parsef equ 152 ;parse function ; fcb equ 005ch ;default file control block ranrec equ fcb+33 ;random record position ranovf equ fcb+35 ;high order (overflow) byte buff equ 0080h ;buffer address ; cr equ 0dh ;carriage return lf equ 0ah ;line feed ; ;*************************************************** ;* * ;* load SP, set-up file for random access * ;* * ;*************************************************** lxi sp,stack ; ; version 3.1? mvi c,version call bdos cpi 31h ;version 3.1 or better? jnc versok ; bad version, message and go back lxi d,badver call print jmp reboot ; versok: ; correct version for random access mvi c,openf ;open default fcb rdname: lda fcb+1 cpi ' ' jnz opfile lxi d,entmsg call print call parse jmp versok opfile: lxi d,fcb call bdos inr a ;err 255 becomes zero  jnz ready ; ; cannot open file, so create it mvi c,makef lxi d,fcb call bdos inr a ;err 255 becomes zero jnz ready ; ; cannot create file, directory full lxi d,nospace call print jmp reboot ;back to ccp ; ;*************************************************** ;* * ;* loop back to "ready" after each command * ;* * ;*************************************************** ; ready: ; file is ready for processing ; call readcom ;read next command shld ranrec ;store input record# lxi h,ranovf mov m,c ;set ranrec high byte cpi 'Q' ;quit? jnz notq ; ; quit processing, close file mvi c,closef lxi d,fcb call bdos inr a ;err 255 becomes 0 jz error ;error message, retry jmp reboot ;back to ccp ; ;*************************************************** ;* * ;* end of quit command, process write * ;* * ;*************************************************** notq: ; not the quit command, random write? cpi 'W' jnz notw ; ; this is a random write, fill buffer until cr lxi d,datmsg call print ;data prompt mvi c,127 ;up to 127 characters lxi h,buff ;destination rloop: ;read next character to buff push b ;save counter push h ;next destination call getchr ;character to a pop h ;restore counter pop b ;restore next to fill cpi cr ;end of line? jz erloop ; not end, store character  mov m,a inx h ;next to fill dcr c ;counter goes down jnz rloop ;end of buffer? erloop: ; end of read loop, store 00 mvi m,0 ; ; write the record to selected record number mvi c,writer lxi d,fcb call bdos ora a ;error code zero? jnz error ;message if not jmp ready ;for another record ; ; ;******************************************************** ;* * ;* end of write command, process write random zero fill * ;* * ;******************************************************** notw: ; not the quit command, random write zero fill? cpi 'F' jnz notf ; ; this is a random write, fill buffer until cr lxi d,datmsg call print ;data prompt mvi c,127 ;up to 127 characters lxi h,buff ;destination rloop1: ;read next character to buff push b ;save counter push h ;next destination call getchr ;character to a pop h ;restore counter pop b ;restore next to fill cpi cr ;end of line? jz erloop1 ; not end, store character mov m,a inx h ;next to fill dcr c ;counter goes down jnz rloop1 ;end of buffer? erloop1: ; end of read loop, store 00 mvi m,0 ; ; write the record to selected record number mvi c,wrtrzf lxi d,fcb call bdos ora a ;error code zero? jnz error ;message if not jmp ready ;for another record ; ;*************************************************** ;* * ;* end of write commands, process read * ;* * ;*************************************************** notf: ; not a write command, read record? cpi 'R' jnz error ;skip if not ; ; read random record mvi c,readr lxi d,fcb call bdos ora a ;return code 00? jnz error ; ; read was successful, write to console call crlf ;new line mvi c,128 ;max 128 characters lxi h,buff ;next to get wloop: mov a,m ;next character inx h ;next to get ani 7fh ;mask parity jz ready ;for another command if 00 push b ;save counter push h ;save next to get cpi ' ' ;graphic? cnc putchr ;skip output if not pop h pop b dcr c ;count=count-1 jnz wloop jmp ready ; ;*************************************************** ;* * ;* end of read command, all errors end-up here * ;* * ;*************************************************** ; error: lxi d,errmsg call print jmp ready ; ;*************************************************** ;* * ;* utility subroutines for console i/o * ;* * ;*************************************************** getchr: ;read next console character to a mvi c,coninp call bdos ret ; putchr: ;write character from a to console mvi c,conout mov e,a ;character to send call bdos ;send character ret ; crlf: ;send carriage return line feed mvi a,cr ;carriage return call putchr mvi a,lf ;line feed call putchr ret ; parse: ;read and parse filespec lxi d,conbuf mvi c,rstring call bdos lxi d,pfncb mvi c,parsef call bdos ret ; print: ;print the buffer addressed by de until $ push d call crlf pop d ;new line mvi c,pstring call bdos ;print the string ret ; readcom: ;read the next command line to the conbuf lxi d,prompt call print ;command? mvi c,rstring lxi d,conbuf call bdos ;read command line ; command line is present, scan it mvi c,0 ;start with 00 lxi h,0 ; 0000 lxi d,conlin;command line readc: ldax d ;next command character inx d ;to next command position ora a ;cannot be end of command rz ; not zero, numeric? sui '0' cpi 10 ;carry if numeric jnc endrd ; add-in next digit push psw mov a,c ;value = ahl dad h adc a ;*2 push a ;save value * 2 push h dad h ;*4 adc a dad h ;*8 adc a pop b ;*2 + *8 = *10 dad b pop b adc b pop b ;+digit mov c,b mvi b,0 dad b aci 0 mov c,a jnc readc jmp readcom endrd: ; end of read, restore value in a adi '0' ;command cpi 'a' ;translate case? rc ; lower case, mask lower case bits ani 101$1111b ret ;return with value in chl ; ;*************************************************** ;* * ;* string data area for console messages * ;* * ;*************************************************** badver: db 'sorry, you need cp/m version 3$' nospace: db 'no directory space$' datmsg: db 'type data: $' errmsg: db 'error, try again.$' prompt: db 'next command? $' entmsg: db 'enter filename: $' ; ;*************************************************** ;* * ;* fixed and variable data area * ;* * ;*************************************************** conbuf: db conlen ;length of console buffer consiz: ds 1 ;resulting size after read conlin: ds 32 ;length 32 buffer conlen equ $-consiz ; pfncb: dw conlin dw fcb ; ds 32 ;16 level stack stack: end ud$4800 equ 12 ; 4800 baud baud$7200 equ 13 ; 7200 baud baud$9600 equ 14 ; 9600 baud baud$19200 equ 15 ; 19.2k baud DIRLBL yd'* !9"1"#2#:Og}**Ip2~w2i#1#":RͶ :O~!ʫ:<2Ž:"2"x2*# O:ļ:<:G>O*# :<t tIw!/>!/>!*6 #:_#:*Y" Y" Y" "*Y"#####Y"##Y"Y"Yz2*Kg"ɯ22!"*DM6:O* 2~ ~ †:<~:2>2:<** "_?:<2>!/:<}:2* ~b W6 y2> # vwm>2>!/ N *~O²+—">2>!/*:< "~G # p *~w#  : *8*:*8yO:O*}O= ~ w#P^#V#ɷ{ozg |g}oh:<͉̉O<OBKBK$'-*!*DD  $$HD@" @@ $B $$H$H$HH$$! HD$D$D@AD HD$!A" Dp"[<-Ki%pm@D"[T-Kl%A@mD"[n-Kn%ЉmD"[-?帡`n@D$"[-Ks% {tX$@UaUzjH+{P@3k(3jK4K6`JYG&ml fհmIW, x@(dz¦.U _6J XKUw(A^Od`@F*K՛v#ץf@#sFI' ASUB 1xCP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282654321Invalid file name $Error On Line $Enter Password: $ERROR: No 'SUB' File Found$CP/M 3 SUBMIT Version 3.0 $Enter File to SUBMIT: $SUBDisk Write Error$Random Read $.$Invalid ASCII Character$Parameter Error$ERROR: Directory Full$Requires CP/M 3.0 $11G"*}0|HҤbP2IK 1">d*++"~"!\. v!q*&!p+q* !s+p+q*:w#6* *#"N#Fy !p+q*!p+q*2 !p+q*!p+q*!p+q*!p+q*!!p+q*2 !p+q*!q*-!q:2!61!s+q:2!6*&"1!p+q*<!s+p+q+p+q:=2d** w*#"*#"=  !s+q+p+q:=2ʩ*:w*#"Ì!p+qe*DM!\.\s!q:a:{: :O2:eel !6>!ڜ2 K*&l :w: T:_:…:r:=2O!l 6 3:•!4**& ~ ~ H!4Ýl :S*Q*Sl.l\P"*}=*|&el\P"=*|5.*& 6!6͝*& ~( 2*& 6e!"!\" "\p.e.:\2O>:2\*& ~ ~H~ H.!4͝*& ~2!6>!`\̓[>!6:<2=O! ~2 ½:<2O>9ҽ!60+~9ҽ!60+~9ҽ!60+~9ҽ!60+4:͓ͪ!"!6:= !6!6#6D2: H% : " :#$ͪ:;!6+~<;!6:$¨D2$X*M å:02O> p<ͪå!6͝:ʔ!5K ҎÄ͝xK ҥ*M Ô" :^D2:^^ :@: O :`:@O :`O " :!:/H     " *M : 2    *++" *& ~2 :Ht !4>>!""\ !6>!ڷ :+ ~° !4‘ * DM*"À * DM!" }2 ͣ2 :  ͪõ!q!r- "w * :w:C w *#" "*#~22_! 8!0!s*&:0!s!6ͳ:  sͳ:  L!`i^#V#~#fo yo w G: xAo o a{ _o     `i~< #~2#~2#~2*| W \!\~R 2 .n~ >2 6!.t~: +  >2 6!N#F#*" ^q#Vp" N#F##"^q#Vp" 4! 7o |  ! 6   \\ ? >_ 1m :~# yo ɍWARNING: Cannot redirect from BIOS $ERROR: Auxiliary device redirection not implemented $ERROR: Insufficient Memory $""SYSIN SUB_ogDM!>))덑o|gQ =?i`N#Fogo&og_{_z#W00001 : $SYSIN $$$FGET :<***.n6.t6 LL!p:~y !6 <ʊ~"x!=F#fh!:~!«!>w~:!5*.~w:; :~!9"1A#u.t.~@w :&/3͖!~6 :~wucy! ʎB d{<ʑ  '*2.2+6.w 22*2$*.6#6*.~w#~=~#4Ʌo$͖O̓!54  !F6#ȷxO҃>^̓@_: N#͖§>  *.>wÔ#wt~xڔp> ̓ 8>""SYSIN SUB hhhhhhhhhhhhhhWARNING: PROGRAM INPUT IGNORED $ 151282 COPYR '82 DRI gggggggggggggggggggggggggggggg"D! BH!H@ $!!$"A! D$DHH$B!"  @A  ]~H!6 î!6!6:WI: W: R!6Wͦ*,*-î!6!6:¨I: ʨ: £!6èͦ2::2:2*îI::Hͦ:!6,-<!62:2*îͦîͦî!6,-î!62:2*îͦîͦîC K l?GOe !p+q*~ ~ H*#"ø*~>>_ogDM!>))덑o|g =o&og~1"CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282654321͈͋> (12/06/82) CP/M 3 PIP VERS 3.0 DISK READ$DISK WRITE$VERIFY$INVALID DESTINATION$INVALID SOURCE$USER ABORTED$BAD PARAMETER$INVALID USER NUMBER$INVALID FORMAT$HEX RECORD CHECKSUM$FILE NOT FOUND$START NOT FOUND$QUIT NOT FOUND$INVALID HEX DIGIT$CLOSE FILE$UNEXPECTED END OF HEX FILE$INVALID SEPARATOR$NO DIRECTORY SPACE$INVALID FORMAT WITH SPARCE FILE$MAKE FILE$OPEN FILE$PRINTER BUSY$CAN'T DELETE TEMP FILE$ *5<P_lz)<\fp}NO DIRECTORY SPACE$NO DATA BLOCK$CAN'T CLOSE CURRENT EXTENT$SEEK TO UNWRITTEN EXTENT$RANDOM RECORD OUT OF RANGE$RECORDS DON'T MATCH$RECORD LOCKED$INVALID FILENAME$FCB CHECKSUM$2FTe$NONRECOVERABLE$R/O DISK$R/O FILE$INVALID DISK SELECT$INCOMPATIBLE MODE$INVALID PASSWORD$ALREADY EXISTS$LIMIT EXCEEDED$eT     =.:;,<> _[]OUTPRNLSTAXOAUXCONAXIINPNULEOFERROR: $ - $$$$DESTINATION IS R/O, DELETE (Y/N)? $**NOT DELETED**$COPYING -$ (Y/N)? $REQUIRES CP/M 3$CP/M 3 PIP VERSION 3.0$:"Q}#( :}#2m#}1͖-m:m#8ͺk 2#2$M 2"!\#6!z#6:z#b:m#2}#!$6+6+6!o#6!"6!"_#"X#}2d#2g#2h#2c#2z#!n#6!e#6#6!j#6!"6:m#ҹ*ͨͺ!#6:}#͑ ͖%#:d#%# :p#=:p#_HH ":S# N:"H ͵!S#6:d#<"$\( K"#&#( Az:S#:" H҃͵!"6&#,"( Az>!S#Ҕͥ z:S#ʡ!e#6:j#z!f#6:p#,:p# Hͥ :p#,2j#!c#w:S#!$6:$!$6:$!$6:"> !"H!d#"ͥ :"/!f#6:" T!f#6>'!f#Q!f#4<g:" dgA2:j#w"á:m#2}#b! $p+q*$}2{#|2x#!!$q:!$_ ͨ ͨ!#$p+q*"$ !%$p+qͺ*$$DM!|#6|#  !'$p+q*&$!)$p+q$*($ DM!+$p+q**$DM **$DM̈́:{#**$ ~Hi **$!{#6!x#6!-$p+q*,$DM̈́!/$p+q*.$DM̈́DM̈́!1$p+q*0$DM *0$DM̈́!3$p+q*2$DM̈́!5$p+q*4$DM̈́!7$p+q$*6$ ~ *6$ >w! *6$ >w$*6$ DM*6$DM̈́!9$p+q*8$DM *8$DM̈́!;$p+q*:$DM̈́ !<$q!<$:$ʐ :<$2$_ *#Mt *R#Mt *"Mt !>$p+q*=$!DM̈́:{#!@$p+q*?$"DM̈́:{#!B$p+q*A$#!D$p+q*C$$!E$q!E$:\# :E$2\#_,0!J$s+p+q+p+q:J$=2J$^ *F$*H$ w*F$#"F$*H$#"H$7  !z#6:h#~ ͡ "j !h#6:g#Ҕ ͙ "j "͢ !}#6!"6l!K$q_ *K$&) N#Fͺ!N$r+s+q:{#2Q$:x#2R$_ :L$:Q$H !R$6 :R$2R$*L$& N! N#F> !L$~H:Q$H> !Q$/H^  ͨ:Q$=O!r N#F!R$6:R$ {  ͨ*R$&) N#Ft>M$H" *M$~A=Oͨ:ͨ!P$6> !P$ *P$&*M$>2O$ :P$ .ͨ*O$Mͨ!P$4¢ ͺ:Q$:Q$H:Q$H:Q$H :d#2z#D :R$>!R$~ HH> HD :d#2z#ͥ  m m ͥ !V#:"{ >!V#:"© !U#:"Ғ >!U#:"© !T#:"ҩ >>͙ %#-"( x"( :+#2+#%#! :{#2y# %#j :x# %# "͢ :{#:x#H!" " :{#L:x#D" L" !#6!g#6͡ :"2""! :{#u!h#6:$/:"HҊ!{#6:{#¯:x#§" ï" :"2r#:"2s#:"2t#:"2u#:"2v#:"2w#" 2{#"T#( !"6#6#6#6!"]#:g#ͬ !_#!"Y$>'")!"W$͙ :k#!l#we *W$$ DM" b" k" :a#Ҁ!@"Z# Ë!"Z# W$Y$;">'"W$Y$;"!@*"!a#W$Y$;""Z#!Z#"}O *W$$ DM" :{#" *Z#*W$"W$Ë:$ң !"W$ Y$W$;"ҝ"ͩ 2V$*##"#>'"G!#4!U$6:U$ր!V$ҁ*U$& :U$W$!$ 2V$!U$4L*W$"W$:V$ښ" "Ϳ " *W$$ W$_#;"+s#r{_$( N :a#!@"Z# !"Z# ͡ *X#"]#X#";">'"X#";"!@*"!a#=X#";"!"Z#!Z#"}O *X#*"DM:"2W#"Ϳ :{#:{#n" :a#҇*x#&"*X#"X#!W#:":"րHҦ!"6" n /2k#:a#/!c#" "j !h#6!i#6*X#*"6*Z#*X#"X#![$q:[$ !"4>!$:$!":$1*[$&*S#M! ^#V*[$M̈́ø*[$&ø*[$&ø*[$&ø"_#;"ڄ *_#$ :[$w*_##"_#øg*[$&øAKYgu!\$q:\$ *\$M:$*\$M:"2]$!$:]$!$:]$2]$!]$:$w>!]$!]$5 :\$ (!"6!^$q:^$!$wF ͹O:^$0O͹!_$q:_$O):_$O)!`$6:$2$:$'2$:$'2$:$'2$*$MP*$MP*$MP:$¿:͹ ͹ ͹!a$q:$:a$ :n#9:a$ :a$H9:$2b$(:b$!b$6<:"<2"!b$(!"6 ͹>!$4k!n#6:a$ F!"6*a$M͹:a$ Z!n#6!c$q:c$a/>z!c$/H~:c$_2c$:c$!d$q:d$A/>Z!d$/Hҥ:d$ 2d$:d$!f$6*"M!N ^#Vͥ `"]#;" :e#/!b#!"X#]#@" *_#"X#*]#*"~2e$*]##"]#`5!f$62e$`2e$`̀2e$`"5E:f$ҕ:$Ҁ:o#<2o#2f$Ë:e$ 2f$:f$ҕN :$Ҥ:e$2e$:$ҳ*e$M[: $*e$M͂:e$>!":"=2"> >>!"!"5+N!~# ~2g$!"4ͩ2g$ >>!$;*$Mk8:$2"!$6:"<2"!"6g>!$c*$Mk\!$6!"6> :g$g:g$!h$q:"!h$wO!~# ~2i$—*h$&~# :g$w>!g$:i$¨!"4í!"6>2p#:$X#]#;"!i#:p#!o$62j$:j$::j$:o$" *j$M2j$2j$2l$:j$2k$2j$!l$w:l$D!o$6I!o$6: $!o$x:j$::j$Hu2j$T:*k$M*j$M:l$2m$"p$2n$:l$ʲ!l$52k$Ý" 2j$:j$0O> :j$0:j$AO>" :j$A 2j$OH!m$wO`i"">!$@ ͥ >!$N ͥ *_#}bO2 ͙ "j :{#" :y#:.#:$:{#Y:{#NH{͟O[2{#Ø:{#Yͺ"͢ ͺ:.#2.#:/#2/#%#V %#͢ %##( "0 :&#!r#2&#:'##2'#:(##2(#:)##2)#:-#2-#:.##2.#:/##2/#:0#20#%#V :$}͡ :"2"!"6"V :b#ڦ!$""K"!>1"""""$@""!>1"""""$ """_#;" !"X#:$/>X#H"H@>X#H"""!r$6>!r$@:r$"!*"~9:r$"!"X#!r$4:e#!f#2a#!i#6!b#6!l#6+6!s$6>!s$ڶ*s$&$ ~ʯ*s$&$ ~‘!a#6ï*s$&$ ~¯:e#!f#2b#!a#6!s$4b~:f#W:a#:i#:c#!i#*X#"_#:j#*X#"_# *_#"X#:k#!i# RG: $!$$5Ͱ5*p#M$:j#!c#G*_#"X#:e#QO͡ "  "ͩ 2{#n Hґ*""#:"2#!i#6:{#°*"#"">'"­!"4:{#*"!"">'"!"4" f:z#!"t$"x$͡ !h6\ !"v$:{#t$v$;"H6*v$#"v$͔ :{#]>x$H"R\ : $\ͺ*v$#"t$:{#_!#&#( &#"( f#!1#6!"6:/#/!$#: $>x$H"!{#6:{#Y:{#NH':$͟O[2{#!{#6Y*x$#"x$!g#6:{#Y! $#Aͺ!z$6> !z$e*z$&%# ~2{$ ^:z$ W.ͨ*{$Mͨ!z$4/:$p>͡ !"6?" :{#ʲ:{#_!# "( :"ڬ>͔ ~>!":R#!":%#HH :#<2#!}#> *#&~# N[2p# :p# H !}$p+q.*|$ 6 !p#6 #6:q#,T:q# A!p#6N:q#$N!p#6 ͒ )$*|$ 6,*|$ 6:"<*|$w*|$ :#w!~$6>!~$ڗ*~$&$ 6!~$4|!"6#6#6!q#6*p#Mc :q#ھ:p#*Ͳ ͒ 2p#ê:p#:¿:q#(*|$#~A<*|$wO>*p#Mc %:p#[ !#5.*|$ 6 ñ:q#1!$6#6> !$ڰ!$6:$<2$O>/:$!$O!J *$&*|$ H~G:$¡.*|$ :$w[œ !#5:$2$!$49:p#[¼ _ :q#!q#6+~. 2p#Oc  :q# :p#* Ͳ ͒ !q#6+~;= 2p#Oc = :q#$ *q#&$ *|$:p#w!q#4 :p#[H !#5.*|$ 6 *|$ 6å!$q!$6> !$ڏ *$&> :$ˆ >!$4l >:q#<2q#O*|$ :p#w:p#?± !d#6!$q!p#6?!$:q# ͒ û 2p#:p# :p#]H!:p#A2$O>!:p# !2p#!ͥ !:p#S:p#QHX!:#<2$2p#:p# HO!1!2p#Ü!2p#02$O> r!!$6Ü!2p#02$O> ڜ!*$&!*$& !$sr!*$&$ :$w:$!>!$ҿ!ͥ -*|$ :$w 2p#_og_{ozg_og^#V))) _{ozg^#V) "^#V|g}o "_{ozgO{ozgi`N#Fogo&og*!""ͮͷ͇*"͛~ͫ#*}#"%"*̀*}K|K*ͺ-m121=2#\:}mͺ2>o:  /\ͺ 1gn~ͻ͙D.:ܰg+":>2 CP/M 3 DUMP - Version 3.0$ ERROR: File Not Found $ Enter Password: $ Password Error$ ERROR: No Records Exist$ Press RETURN to continue $,( COPYRIGHT (C) 1977 DIGITAL RESEARCH 112O02Z0̀%!"K2.>2.*M0"$/̓%!"":g0i!"P0"R0"2:0v: 0$  :[0-ʬ+ʬ* :[0!_0M!f0P p  !   :O0Ĝ!":O0*V0}|<r ͪ*|Ĵ:O0_͑H *V0"Ù*V0"E V» ͪ»**»"Ù*K0"X0!0NA#~' ~p"K0*K0N"X0!0q#*w œ:0!x ͜ *V0*R0:_0̍"V02*M0r; !:r :0F: 0e%;m ">2:0b: 020 W,F:0b: 0e,ʹ:re*X0#![0~ʇww2/ͬ:2T/-"."$/2/>2.v:.ʸ!/6+͕%>20:.ʮ:.0209$<!5*}Ģ*V0":0y: 0:yv! X! ^#fkX _~ 0^ Z   2 5 8  :0‰:0=ʉG! 0ʃF#2sÖ*I0| E2V ,[ ͊m *R0"R0"P0 m E2D2V ,ʾ ͊:/ m :/ "> 2/:Į:0 : 0 -Ͳ !/6+:.;?*$/*."$/?"$/:.l*.^#V{r+s5*.^#V ʓ:. r+s!06#wÚ> 209!e/~6![0~6".~,#!0w9 9*.~6 *: 0,Ĵ2f/*.s#r2[02e/*.#"X0$<5ͬ*$/"M00:T/2:/2[0 v>20*.".2[0v*R0m "R0͍"R0!/w >=G*R0*I0"R0"R0 m :/ }>͞ ¥͢ :O0*V0*ʿ͜">2:O0:0:O0!!4:0: 0,>"4:O0: 2\0:0=: 0 F!Fʹ%*X0"`0>2Z0*X0":0k: 0T!T:\0¦:O0¦:0=ʦ ʦ*"X0 !':[0'Tx»!Z04TT!Z05T:\0!":]0!**V0":O0*X0~ Ĵ*X06 '>#G*I0!" :0 :Z0 !0N*K0:O0Ÿ"b0+"X0yʛ 'É' Ͳ >ͮ 222:0: 0 !ͮ-:0:0!4 :0& : 0::0!xI !4̨ e ::̮>͞ } !~5:Į ͵ !4̨!~5 G!~Ҩ4_!p!~ʮ5^!~> >2\0:0N *K0"+"X0:0 >''!:0N : 0,N :0 >  > !0N#~' ) > ''*K0"V0:\0x ʹ:\0" m }*K0"+"X0''*K0"V0>"4ͬ:2T/:[0 “ 2/-*M0"$/*X0!{#zڿ ~+"X0*M0+"M0wß #"K0*M0".:\0 N]T s#r+*V0*{_zW".:\02.R     % *I0:/ ͪ% ͬ:O0ĭ%  :.ʢ :0¢ *K0+"X0!2<20*#"" : 00Ĩ!??" 09"K0+"X0$< :0¢ : 0,? ʹ  *} :]0 :O0 :0 ͤ%:e0ĭ%:0 : 0  ͬͧ%vʹ   ͺ :0: 0 !;* _!5 ^#fkS \ h n 2 ͠ ͻ ͵ ͠ ͖ 8{ Ăy0 2͵ ͖ Gͻ ͋ ͖ 1ͻ ͯ 2ͯ ͖ (Ăy 2͵ ͋ ͖ ͖ Ăy0 ͖ 2ͯ 1 'd ! ^#V#*0}o|g*  ":D x=D y0P 2!0^4! 0q :0Ė: 0,; Ė*I0m |}$† ͌oy Ԍ͋ 8O͖ Ăy01y 1m X:0 : 0, >C͘%:0 : 0 v;:0 : 0 v-!v !v-ʹ {ozg:.7ͮ2Z0!O0~4l!"*|>"V0*""J͊!/6 !/͒%:^0ʏ>2.͡%ͱ*K0*T0&*M0*T0&\ ͍!/w#õH USE FACTOR !/͒%*"P0Þ%z{*P0"R0*"V0 !":O0Ģ*R0̜*R0ĜG:O0xě%:/ *R0̍:xz*P0#"P0E2D20:b!^4!/wjj*R0!6zz{z4A_A?ɯ2.2*T0"V0!.8w# *V0*K0{zҤ*b0+"X0 =$**X0#Þ!.*V0".#"X0$:d0<:0<! 0~?<#ʐ: 0͡!.".^#V"V0}{##~2.*.^#V#"."V0*V0}d##~<2.G*V0##"X0:.> u!.~w>w> u:.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-!2~B6~44O!! s#r!1~ _6^4! w!p!2~~!55N!! N#fiooo&)^#fk9BIO[ov ͌z{>ɯo>g͌"!6ů{_zW5>)D*OxG !?DM!xGyO23)#͌)=R|g}o=^͌͌roz{͉͌͌}|͉͌Þ͌Þ͌ë͉͌!!o#Ã͌zg{o͌zg{o͌zg{oolo&3:0: 0 ;!,ɯ2122=2 !"I0&q!1~\5_! ~͔D:2:/ *!"I0:/ :0:0! 0^#=ʙV¨*0!҂ :0:0& !!>O: >2 yU`:10_!~0!1s! ~͔ yU!1~N=w_! ~QZP>2 ypP͘% >U̘%>: 2 3>E͘%óf:.O*.~H:.=!4>͕%0:/#". ͆%2G:0xa{_ ʇ ʇ:0x҇_<20!/w:e/S:e/9ɯ2f/2d/2e/:0:e/ !2f/g/~#»S͉!f/~4!g/_:e/w2e/ɯ<*V0"36*"V0ɯ2!4!f/6".!f/~55!d/^4!g/~f:.:e/JGwf^l͗^{:e/&{!f/4#ww&ʞGʱ2e/xf͗ :e/&ʕ:0  ý͗&{&{ý͗  !e/~&>62/-!.6*M0"$/B".2f/*"V0͗ 2f/2e/2[020> 2͕%>20ɯ202!0~@$6^4#:[0w~$w:[00 6:[0A:[0?e@eAɷP6 o2[0:Z0ʦ:\0 :O0¦:[0':[0 !20:[0 R;/>20:Z0?:\0:O0?́;B*`0*X0++{z~ ++!+"X0:Z02Z0́ͪ'2Z0X:[0*K: ḰͪX? X́ö20Pg>ã6r>ã:[0'ƒ2[0>ã ¡:.ʔ>+2/͕%!/6 >20>20:[02́:0:Z0: 0=!EQ<!LT:[0=!LE>!GT:[0=!GE2[0" 0!04>20![0:0/ʦg¦´/ʦA¦:[0O<QA>HHR>22[0m:B_>fD> j!052!"0!0N#~#A҄0Æ7O!~*0!ʩң)Ú "0 x:[0 '¦́'æ:[0 :[0,;%:[0 !:[0; ,202́/>20:[02́:0G:0::0l:[0'́:[0' 20/:[0'|>20^—́:[0  <¨!~4 >¼!~5 : >20>V>O>I>B͘%!QéÉ $ ? H Y ` e Ò ü ò ~ÏGÇåûfD?<==:e>?; ><>; ;<=R>>>F>;>G==<==>=s;=P=*>=$?P:-?]>*<<==<;=>>y> ;: =;>?>P?<=?>>=<<i;m=>c==>o>v<=<;8?N!Nw#w#W!"V0!.w#w#l2N!.~4^!.~w!.ͼ!.ͼ!.ͼ!/~w!$/ͼ!D/~w!T/~wN#Fp+q!.~^!.!. !. !. !/!$/ !D/!T/5~wN#Fq#p>BØ%!0" * F#%2NG*V0##~w*V0##~<͉:.t!.N!. yq~t +aG=#w#wY*M0!0n& {ozg"V0!K0{#z"M0b*M0!0N#yʢ ~Õb!."O1:N *M0!$/{#z"V0$ _!.*V0~#~1 ~#"M0û1 !͒%Þ%SYMBOL TABLE OVERFLOW G*V0##~w*V0##~=*V0_###1 s#r1 ^#V1 ##"X0P wP ~O!0~z 6~=ͼ !0N#~ͼ „ Ͳ O2Ny *\ ?=)$=)w#Ž&!\60 ڱ&>GO#w ³&>O # &6 &6L#6I#6B#w2|r&\u'>2]0!"%![0~2%wG&!,x&>82%2%!"b0*"M0!1"%"&"@&#"K0"T0' _#~6' D':%A6'>:6'D'>.6'D'>-6'x&!,N'!k-x&!,N':% '> ':%'_!% '6 4ɯ2%2]02e02d02g02%:\ =)!%w#w#w#w#w#w#>2^02_0:m$(!~#$,(~(# 3(%Aʩ(Pʩ(Sʩ(Hʩ(Lʩ(*t(+t(-¶(^0~Sʣ(Mʣ(e0Lʣ(d0Qʣ(g0Rʣ(%1¶(x#3(~AҶ(#3(#6 !)-x&!x&!%͉&!%͉&ͳ'(`&͛'͠':%)!&͉&l&͛'͠'!%60#60#60#>2f0!"&:O0*!"%2%2%2%Z&%u'!-x&z{:]0ʢ)*%F)w)!"%r&\‰)*%#"%+~):.2]0ʢ)r&\!~-N'*%F))Z&!"%*%B&%)¼))*)6# )G&*%*%#"%~!<-x&G:%7*$*x*7*x2*Ϳ'5*9**&*&w#"&!F)`&!"&*&%~ʅ*B&Œ*`*G&`*!S-x&ö,͟**>&*@&w#">&!F)l&!">&*@&&`*_!%~ *2%*b0}!,~ +*#+> *>#**> **b0~>+*#2+> *> *> *}2%!%*O*:/ :O0:%y*:%!O0•+:e0!]0+~,:/ ,!/~ +:f0,:/++:_0,+:/#,:/ ,:_0=+!/~ +!0s!%~!%*4:0!/,G~Y+#x=+> Y+> Y+20!/>x6 #=,G!/~ pͳ'*&}?,>*/,`&%͈':^0*+,!&6S#6Y#6M#w!&w:%2%!"&ͳ'*2%`&%͛'͠'+,:%ʶ,:%.*P0"%.*>&}ʶ,>͕*æ,:%,l&&͈'!-x&CP/M MACRO ASSEM 2.0 NO SOURCE FILE PRESENT NO DIRECTORY SPACE SOURCE FILE NAME ERROR INVALID PARAMETER: SOURCE FILE READ ERROR OUTPUT FILE WRITE ERROR CANNOT CLOSE FILES UNBALANCED MACRO LIB END OF ASSEMBLY G:%x-!%~--.-*P0*%O {-z-.*P0"%!%^4!%w..WƐ'@'Õ*>:͕*!%^Ww*%{-|-}--{?.!%~#-6.-> ͕*> ͕*͞*> ͞*ws$ogo&og_{_z#WBNKBIOS3SPRRESBDOS3SPRBNKBDOS3SPRCPM3 SYSGENCPM DAT . $ÀCP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH251082654321!9"k1G \!m!w# š!v6H#6E#6X!e6C#6O#6M<<&:g.".g"?S:2n!`w #4o"c*e{ozg"hj:]@*c"\y!5C*^N{zb+"^*^*`*h"!j4&"h"y:b<5*kG!gwxS0  *cN,*cN{zҽ{,*c*e{ozg ~*c#"c> :[ >  X N*c>:> !:q#G*eDM*h ERROR: $DISK READ$LOAD ADDRESS LESS THAN 100$DISK WRITE$LOAD ADDRESS $ERROR ADDRESS $INVALID HEX DIGIT$CHECKSUM ERROR $FIRST ADDRESS $LAST ADDRESS $BYTES READ $RECORDS WRITTEN $CANNOT OPEN SOURCE FILE$DIRECTORY FULL$CANNOT CLOSE FILE$HEXCOM VERS: 3.00 $on: The USER command sets the current user number. The disk directory can be divided into distinct groups according to a "User Number." User numbers range from 0 through 15. ///2Examples A>USER Enter User#:5 5A> The current user number is now 5 on drive A. A>USER 3 3A> This command changes the current User Number to 3. ///1XREF Syntax: XREF {d:} filename {$P} Explanation: XREF provides a cross-reference summary of variable usage in a program. XREF requires the .PRN and .SYM files produced by MAC or RMAC for input to the program. The SYM and PRN files must have the same filename as the filename in the XREF command tail. XREF outputs a file of type .XRF. Examples: A>XREF b:MYPROG A>XREF b:MYPROG $P è COPYRIGHT (C) 1980 DIGITAL RESEARCH @: 5@%15252'5h+U"!""*"5j"2u3>2v3*5"3-ͩ-:5Z!""$"5"5"5"5"5" " 522>2 5:4 b:4$M:(5-C+C*M:(5!,5M[!35PMp%M(ʡͣ#v#ƒ$:5}% }!"&:5ʦ>%*#5}| V AX*|:5(#$*#5"A*#5"&#v#% RØV AR*&*R"A*5"%5!4NA#~ͫ% p"5*5N"%5!4q#͢%w 3:4(x *#5:,5o"#5V%2*5Ô; !:V :4:4{%͉"">2!:4:424*o,kÊo:4:4{,ʊ:k*%5#!(5~́ w23@:2(4y""3"323>2v3 :u3L!P46+(0>24:u3:v3"U24͋$͇%ͩ$!5*}*#5":4:4: =X!^#fk:Vj&AW y ~   8 ; C :4:4=G!4F#I ,*5͘EIr,o͉n2"5~2 r,Yo :K4 ͉:K4 " : 52> 2K4::4M:4 Mg %U!P46+:v3Ϳ$ý*3*3"3Ϳ$"3½:v3*3^#V{ʽr+s*3^#V ʽ-:v3:r+s!46#w4> 24͋$í!94~6!(5~6"3~,_#!4w͋$ÏV *3o6͋$*3~6 Þ*3:4,"3~ š62:4*3s#r2(5294*3#"%5͇%ͩ$@*3"5":(42:32(5Ģ >24*3"32(5 ͉r!Q4wM>=n2*5~2%! 5%~2͉:K4 v }>v S M:5p*#5*gu>%"u> %2 :5O%:4©:5[%! 4:4©:4,ʀ>:5: O%% 2)5:4:4 !*%5"-5>2'5*%5"&:4:4(:)5N:5N:4=N N*&"%52)ͫ%:(5ī%x;c!'54!'55:)5ž!":*5ʍ!5%Ù*5%*#5":5*%5~ *%56 ͫ%<͉:K4 "5~2o M%(>@%>#*55%!".!/5",:4M:'5M*,~#T :5T !4N*5*,s#r+"%5yP  ͫ%> ͫ%%g >v % 222:4¦ :4 – ì !ʬ ¦ À :4:4€ ( :4 :4:€ :4€ (€ € x !4À  :€ :>S %2 !~5€ :%j B !4À € !~5€ úG!~4_!p!~5^!~>À >2)5:4 *5" +"%5:4ڥ >ͫ%ͫ%[%:4 :4, V :4  + !4N#~ͫ% > ͫ%ͫ%*5"#5:)5- :)5%͉}*5" +"%5ͫ%ͫ%*5"#5>@:2(4:(5 H 23y"*5"3*%5! {#zt ~+"%5*5+"5wT #"5*5"3:)5ʑ N]T s#r+*#5* {_zW"3:)52v3 > > >2 5n2"5 %: 5*#5* 5"#5*55%"#5:5KBn2: 5O0!*", ++ *5:K4 0@:5Ĩ/ú>2) :u3ʭ :4­ *5+"%5[%2!<24*$#"$""*:40!??"4͋$"5+"%5͇%ͩ$+:4­ :4,J "*} :*5 :5%:4 +:25Ĩ/:4 :4  @S+ >2):4„ ͣ#v#: :5$:)%k %G I k :)%:)c %k %+:4„ :4, " :4 :4/ :4 :5 $*#5^#V*S"s#r*5*#5s#r+"5 |#v#*#5" 5:4 :4/ !"5:5> %AB,#*#5 :4:4 !;*M_!Q^#fkox Iͻ8ʗy0IͻGͰͻHIͻ(yIͰͻͻy0ͻIH'd ! ^#V#*"0}o|gF 9"":!`x=`y0l2!!4^4!4q/:4:4,; *5͉: 5ª|}$ªo͕Ͱ8Oͻy0H͕H͉: 5në:4:4,>C0:4M:4  ;C:4#:4 ! #! #{ozgBB**}j!]~ } #ymy>2(>2v3͖*5|EB"#5>%0,# ^#VÕJB*50MB*50!".*5} "#5^#V"5*.s#r+".*."5:u32'5!5~4P!"*|"#5>%*5%"".o!P46 !L4*>2(>2v3͖>2(>2v3͖NB:O* 0:+5ʘ0*5*!5S*5*!5S\gr!P4w#þH USE FACTOR !M4** "5A1z{*5~2*"#5v#!":5(%! 5%n25%%%>%n2G:5x:L4 o:x_*5#"5:5ʽ*5|ʉIB0>%%O%O: 5%*55%ý:5ʽ: 5O*5*5ESS͎2O=>O͎2N=#y{#* 5* 5 "#5" 5͎21͎2=HÎ2Î20:G!^4!K4wOOn2!6z_{_4A_A?*!5"#5*#5*5{z*/5+"%5**+"%5% V%=͇%͢%*%5#þ!v3ʲ:(O! ^#V4@B%GFB>%%O0*#5##~<##ò*#5"|3#"%5͇%:15^:4^!4~?^#ʲ:4͆!~3"z3^#V"#5}ʝ##~2v32w322(!~38w# ͖!~3"z3>2y3*z3^#V#"z3"#5*#5}ʩ##~<2x3G*#5###"%5:w37> ͺ!w3~w7>w> ͺ:w3Pd!5^!K4~ B!~624(02w3%!>%|_}_> ͺ!w3~w:x3ʜ=͢%ͺ!w34È*#5^#V"#5!y35:24(0!^4!K4w>R0>V0>D>P>L>O>B>S>N0!u~ڇK6N4!E s#r!U :mw* 5!] s#r!t~ ڹ6K^4!1w!;p!u~K!5N!E ~#fo!U ~2n!] ^#V"pK2oo&) ^#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:4 ;!,ɯ2t2u2 52o=20!"5" 52m{!t~Q5_!1~9:uK:K4 *E"5:U2 5*]" 5*v"#5:K4 $:4§:4KK!4^#=ʣV²*4(—ҌV :4:4V !!*/O:0K>20y_j:t:_!;~:!ts!1~y_!t~X=w_!1~[Kdͪ>20$y$zU0!%2m*#5"v:mP>U0%4>%:m!>2m*202m!" 5/:0Kx*#5DM*5" 5}|^#V<>E0:u3ʛ*3~Œ:v3ʁ!\4>A!(0":3]#"3,ž"3Þ-2\  :4x_<24!K4w:94͜:94ɯ2:4284]294:4:94K)2:4;4~#!͜,!:4~*4!;4_:94w]294ɯ<*#5"W͉#4#*W"#5ɯ2[![4Y5!!:46"3!:4~q5!84^4!;4~â:u3:94†G³]âʻ^¨^·:94&·!:44#wó&G294xâG:94&:4G/G&ʷ/&ʷG/G!94~&>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:4Z:'5:4=!EQM<8!LE:(5=I!NE>I!LTM>!GT:(5=M!GE2(5"4!44>24!(5:4ruͳ u͇:(5D(OʓQ˜>ßH©>2T2(5:SD(B¹>D> !452T!"4!4N#~#A07O!T/!~*4! ) "4 :(5 5!'':(5 :(5,;%:(5 !:(5; ,J242Z$ l ` / ‰ >24#!:(52S:4; ¡ :4/!:Z/!)!:4 :(5'#!R:(5'z 24É :(5' >24#!^ :(5 #! #!;!)!<!!Z~4z #!>!!Z~#!5z #!:Z#!G )!Rz >24>VG!>OG!>IG!>BG!0!P!w#w#["!"#5!U3w#w#p"!u3~#4^!v3~w!3ͷ"!3ͷ"!3ͷ"!3~w!3ͷ"!4~w!(4~wN#Fp+q!u3~#^!v3"!3#!3#!3#!3"!3#!4"!(4"5~wN#Fq#p>B0!4"%*%F# #2P"*#5##~G=#w#6#w]$*5!4n& {ozg"#5!5{#z$"5f$*5!4N#yʦ$ ~Ù$f$!U3"Q"/$:P"%*5!3{#z"#5%_!U3*#5~#~&%~#$"5ÿ$&%!%*A1SYMBOL TABLE OVERFLOW *#5###w*#5###~,#*#5_####&%s#r&%^#V&%##"%5F%wF%~#!4~l%6~=ͫ%ͫ%!4N#~ͫ% y%͢%͢%2P"*ÿ*:?*ÿ*:@*ÿ*~x/~# *> x/\ ?-$-w#+!\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-25L-15Q-8*1,-x#ñ,~A,-#ñ,#6 !1*!*!E**e !N*+-!j**%,r-6* ,,:=*ʂ-:>*…-2:?*ʨ-!***ѯ2:*29* ,,!3*60#60#60#>235!"*:5ͨ/-!"f*2Q*2e**E*+!1*z{:*5G.*B*-.!"B**\..*B*#"B*+~¤.:u32*5G.*\!F2+*f*-•.*!"f**h*ʹ*E*€.a.Ò.Ҫ.ʒ.6# ‹.͹**h**f*#"f*~!2*G:=*..xx/.x.1,..****w#"*!-*!"***j*!*-/~5/ʹ*9//͹*!2*1L/****w#"*!-*!"****/_!5*~ ͳ.27**/5}!1~ /ͳ.#/> ͳ.>#ͳ.ͅ/> ͳ.*/5~/ͳ.#/> ͳ.> ͳ.> ó.}26*!7*è/Oͳ.:K4 :5:=*yx/:8*!5I0:25!*5—0~0:K4 0!K4~ —0:350:P4+—0:,50ʗ0:Q4#0:L4 0:,5=ʗ0!K4~ ʇ0!4s!7*~!6*Ԩ/4:4!K4ʺ0G~ 0#x=ë0> 0> 024!K4>x6 #=0G!K4~ p%,**}0>ͳ.0*j*+:+5ʨ/0!s*6S#6Y#6M#w!*w:>*2=*!"*%,ʨ/26**j*կ ,,0:?*1::*Z1ͬ2L1͎2**}1}w1>B/a1}|Gd/:?*ʓ1**+![2*CP/M RMAC ASSEM 1.1 NO SOURCE FILE PRESENT NO DIRECTORY SPACE SOURCE FILE NAME ERROR INVALID PARAMETER: SOURCE FILE READ ERROR OUTPUT FILE WRITE ERROR CANNOT CLOSE FILES UNBALANCED MACRO LIB END OF ASSEMBLY : 5O!5 ~#fo: 5O!5 s#r:?*yʟ2š2ͬ2Ž2G:9*29*!:*4>6:9*L/29*2%#333/3 3333#332E3 3   MXList WAITING FOR PRINTER $PRINTER READY $BBÃà à ÃÃ1j$|@ "H$UUT$$ $I D$BA@! B$$A IA $!"  @$@$BI!!@""$DA  $I$@!çCOPYRIGHT (C) 1980 DIGITAL RESEARCH ? OVL LINKING $ $ 1L9M9!96w:o9!9D:!""!""!"9*9^#V"9"q::u9 ͥ6**=;"`:"b:q:b:͞8.96`:q:͞8"9|!96wj1:9R,v!!]:ڤ*]:&f;) N#F͋41!]:4:u92:2:2;2E;2u;2;2;2;!D:6+6!E:6!"p9!"m9}2o9!z962v92x92w9!t96X!"y:"{:"}:":":":":":":":":":":":":":"i:"k:"m:"o:}2:!:6#6#6*9"q:2C:2D:2E:2R:!"X:o&"Z:|!"s:!"p;";";";":":";"7;*+":*+":*+" ;*+"9;!":":";"?;!":":";"A;:9*b::9=o&))9  ^#V!!<4*<&^<) <͞8-*<&^<) ^#V"d:M*<&^<) q#p!<4*9&))9  *`:s#r*A:)8"p9*9&))9 q#p:9<29O>D:9=29D:9ڗ*9&))9 ^#V"p9  ^#V"`:*`:DM!96#~ͬ . ":\ -:+: .+: -:9":5*.:~=ͬ :9('*.:~(*.:~)H^*.:~,NDͬ :9['(:9vC()!o96>5!B".:ͬ . ":\ -ˆ*.:~=Ÿͬ ï.+: -§:9ҹ'*.:~*.:~(H*.:~,Dͬ :9'ù:w92y9:9F:9(C(͆7:9):o9:o9H4!"p9>:o929*p9"95*.:~(*.:~ʐn*.:~)p̀^*.:~*.:~(HҍDO:9ʛD*Ͳ!6~̈́6*& 6:[],()?$! : @: <_2 <: !#<ڲ*#<& :<«>!#<4>*.:#".:*.:N2<&õ͵:< ͵!<6 !%<6+6:%< :%<  !<6͸ !\6͊ !!%<6͊> :%<5 !͸ ͵" :<:„ :\:%<Hb !:]A<2\O>v !*%<&\ 6 ô !%<6:<.° ͵͊ڰ :%< ڧ !͸ ͵Ô ! :%<<2% :<02<> : :>!"&<͵͊6 - *&<))))*<& "&<0 D͵ *&<:/͵: W :ZD͵:ڎ :!Q: D*Q:&J: : >!:*!^:6+":^:$t 8'> *0< ~L*0< DMB5*0< 6*0w#6!4w#6*0<##N#F*.< ~O`i~8p8!6Ͷ8ikS*0< DMv5*0< DMd5*0< *0<##N#Fq#pä*0<##q#p*u:#^#V*u: ^#V*u: ^#V*u:~*u:~*u:>*u:~*u: ^#V*w: ^#V!8:=<Hw!>:><Hw!?:?<Hw!@:@<Hw!B͔8>ͥG<8'*u:"w:*E<#"E<ͺ"u:>͔8$>ͥG<ͮ8!TJ<ͫ8:P<Hr:Q<ҁ!U<6 Æ!U<6:U<q:ͫ8+s#r!`:͹8ң96:T<Һ*JE<ͫ8*P<&i:) N#F,DM,*LE<ͫ8F*P<&i:) *q:s#rN*q:DMͷ!V<6>!V<ڷ!"Y<*V<&i:) ^#V"u:>u:ͫ8ʝͺ"W<*Y![<,*[<&i:) ^#V"u:*[<&<) N#F.>u:ͫ8%OkͥDMͪͮDMͪDMͪͺ"u:![<4!"i:"k:"m:"o:*d:##6*d: 6*d:^#V!`=p+q*d:*_=s#r*d: >!a=q*d: :a=w*d:##>?!b=q*d:##:b=w*d:##~*d:##>w*d:##~*d:##>w*d: ~!c=q*d: >:c=Hẅ́d:8++"\<*\<^#V!e=p+q̈́d:8++"\<*\<*d=s#r*d: ^#V!g=p+q*d: *f=s#r*d: ~!h=q*d: >:h=Hw!k=s+p+q!^=6:k==2k=ʱ*i=:^=2^=*i=#"i=Ñ:^=2^=!n=s+p+qͽ"d:`:d:͞8͹h!n=*l=*d: DM*n=>*>̈́d:8+s#r!r=s+q+p+q*o=DM*q=̈́*^=&^<) ^#V"d:>d:ͫ8ʆh!q=}*o=*d: DM*q=>*}U!r=}>M"d:<>!|=r+s+q+q+q+p+q+q+p+q:u=2}=:z=Һ!}=44*`:"d:*}=& "`:q:ͮ896<*s=DM*u=̈́*^=&^<) N#FU*^=&^<) *d:s#r*}=M͍*v=DM>*y=M*u=Ms*x=Mf*u=*d: *s=DM -B:z=Y*{=DM*d: ~#k!{96 MODULE TOP $UNDEFINED START SYMBOL: $YY???? $$$XX???? $$$RQST$ UNDEFINED SYMBOLS: $ABSOLUTE $CODE SIZE $DATA SIZE $COMMON SIZE $USE FACTOR $!=q*=MͲ!~=4!=q> !=8:=0OͲC:= AOͲ!=q:=O:=O!=p+q!=̈́8MD>=08MD:;!t;!;!;:u;2\. ] -Ÿ\ͩ6!t;6!;6!;6!;6!=6+6>!=*=&f;) ^#V"= *= ~ *= DMv5 *= 6!=6:=<2=:=7::2\. ] -)\ͩ6*p9###H:ͮ8!D:U!\:6*p9###F:ͮ8!C:r!\:6*p9###X:ͮ8҉!\:6:R:>S:ͫ8:U:H:C:/HҼ!\:6!\:6:E:!C:!\:6!\:6:C:*F:"::\:*p9###":*p9"::D:*H:":8*:*:"::r98*:)8":*:*:":Z:X:͞8_X:Z:͞8#"y:e!"y:!:6*X:":!=6>!=ڞ*=&y:) >Ͷ8Ҕͥ:=<2=v!":::2=!=6:=#w:==2= *=&:) *=&: N!: ͠8*=&: ~2=*=& :=w:=2=:=<2=õ*=&: :=w::<2:*b:"d:`:d:͞8q͜/!9H`2UO!: 8DM>ͪ̈́d:8+s#r&!]:6>!]:7*]:&f;) N#F͋4:*]:&<) N#F.B2=:="="=:=O>"=n2=ð-*]:&i:) ^#V"u:>u:ͫ8-2=ͥ"=ͮ"=!"=nͺ"u::]:<2]:w!=r+s+p+q*=}*=_DM͘4*=#*=|_͘4!=p+q*="d:2:=2=:=O>Ґ*=DM^"=ã*=&:) =8"=:=O>:=O>==͞8UO!: ͹8"=*=*="=*=DM*=8*d: ~*d: :!z9/H!"=ͽ"d:`:d:͞8HҴ>=08>͔8S6!~=6U`/wUp/>=08 \8 M`͹ҖÞ2DM_   *=#"=̈́d:8+s#r >!=Ͷ86!=6>#w#62~=ͽ"d:`:d:͞8N/=:=!=6>=08>͔8'6!~=6w*=#"=>&8)))M`̈́d:8+s#r>!=Ͷ8\66!=q!=:~=v d!=6h!=ڤ:==O! *d:N:=<2=|:E:J:*Q:M2"V:!"V:|!=6:Q:!=:==O!J: NͲ:=<2=6D:R:*U:&:) S:8"V:D>!{:Ͷ81*:"V:DX:ͣ8D*X:"V:Z:X:͞8mX:Z:͞8#DM*X:v6*:DM*:6*:DM*:6*:DM*:6`:s:͞89ͮ8*9|=ͫ8 Ͳ(Ͳ*=DM_-Ͳ*=*=+DM_)Ͳl*|9DM_68f ͥOr:t9Z^E.:n~:x9ZyU/?OVLAY?OVLA0RELIRLIRLREL))O`i~8p8>!:!>6::!>:>=O!: NͲ!>4½)2:͕":)2::: !:6!>6::!>. ):>=O!: Hq!>4 *h&\8*|& "9>*7:DM\͏5*9+"9!>q:>2]:*]:&f;) N#F͋4!>q:]:!f:Ҏ *]:&y:) N#F*>͘4:]: Z:y:͞8Ҽ *y:"Z:X:y:͞8 *y:"X:*]:&y:) N#F+q#p!>s+p+q::2>O!: :8">*>DM*>h!ͮ"!>2>:>>!>ͫ8HA!ͱ!">G!*!>">*>DM*>MC:>e!*]:M͋!*>*>*]:*>*>5:=Ҭ!ͱ!"!>>͔8ž!*!>">!>6í!!:]:2%>*>M^ *>DM4*>#DM4O`i~8p8"#>*%>M^ *#>*b:"d:`:d:͞8%"*d: ~#"*d: 6̈́d:8+s#r!!{96:*:MH"H"!^:6:*:Mi"2"g:͜2f:o"=6*:::: -y"::29:*::ͺ/Ҵ":*:͉:*:M"!:͹8"/Ͳͯ/Ͳ Ͳ=6#:*:*:*:*:͉*:*:"::*:M/I#:*:͉*d:DM :*:Mҟ#{#=ͯ6Ü#*:&:) :8DM>*:Mf#:*:*:&:) :8*:͉*]:&y:) N#F*]:*:DM5!=6#!=6*:":*:M^ :]:$$*g:*:":C$*]:&:) :8*]:&y:) q#p:]:P$!=6*]:&y:) N#F *:":>!:Ͷ8::HҲ$:R:Ҕ$=6ò$*:&:) :8"S:::2U:!R:6:0:$)$ò$!&>6>!&>%%*&>&:) *&>&:) 8*&>&:) q#p*&>&y:) q#p*&>&:) >w#6:&><2&>$s:q:͞87%*q:"s::G%͸*9"q:^ :_:/2^::{9]%!!)>s+p+q:)>ˆ%*g:*'>"'>:f:҅%!)>6Ý%*)>&:) '>8+s#r*]:&y:) N#F*]:%*'>DM*)>M͋%*]:&y:) N#F*'>*)>*]:5y y !*>q:*> &>!*>&:*>#&+"ÿ&:*>1&p"ÿ&:*>?&k$ÿ&:^:ҿ&:*>=O!& ^#VI"ÿ&ÿ&͈"ÿ&>ÿ&͵"ÿ&#ÿ&T#ÿ&#ÿ&#ÿ&$ÿ&$ÿ&Q$ÿ&d$ÿ&W&]&`&f&o&u&{&&&&&&&!+>6)&)2->:^:&*->My (')2,>')2+>:+> '*+>M%('͕".>:^:('*.>DM*,>^%:+>&7','!0:6&H'='!0:6!"1:"7::!:'*:͗8"1:"7:. 9\ -u')29!hʦ':92h\͕6¦'\=45)2|29!:6*7:"1:!"9"9^ :_:/2^::!:!_:' ',':e (.e -'e>*2!:\d5I'}/B(}͉ͽ"d:`:d:͞8)͹(:v92\!0>6>!0>گ(h!0>҈(*0>&\ 6 å(:0>=O! *d:*0>&\ w:0><20>g(!!:6.e -¼(\W5/(!!:6.e -(\d5*d:"1>!_:6I'*1>"d:̈́d:8+s#rI(.: -)!:6!:6^ ͽ"d:`:d:͞8)/)*{:DM>fy ^%y !":y y *d:"4>#*4>"d:!3>6>!3>)h!3>ڶ):3>=O! *d:Ny û) y :3><23>Œ)*:"::)͸*9"q:̈́d:8+s#r5)!0:4~ (*6*1:#"1:*7:{z*!"1:/ *1:!>~26>xG:6>26>G )x{_ P*#B*>ɯ`iq#zV*COMPRLRSPSPROVLSYM!;>q*5:> :;>w*5:#"5:!3:͹8ڦ*>*3:DM\͔5!"5:!<>q:8>!<>28>:7><27>*!7>6*8>Mq*!8>6!=>q*=>Mq**A:#"A:!?>p+q*>>}O**>>|O*::+:o9+h,*p9"A::\:,+**V:DM**X:":!@>6::=!@>q+*@>&: N!: p9͞8j+*@>&: N͍+!@>47+:o9:o9HҌ+ -!C>q:C>¢+*X:"D>ó+*C>&:) ^#V"D>D>A:͞8+96D>A:͞8+*+*C>&f;) N#F͋4*C>&y:) >Ͷ8,:C>,*X:DM',,',|9A:͞8&,*A:"|9!G>p+q*F>"H>*C>&y:) F>8+!H>͹8g,*H>DM4O**H>"H>3,::=O!: N!: !y: 8*p9͗8"A>**A>DM**:o9,***p9DM*,*m9DM****:r9,*:DM*,*!J>6>!J> -*!J>4,*p9"A::\:(-ͦ-ͦ-ͦ-!L>6::=!L>|-*L>&: ~2K>u-*K>&:) A:͠8e-ͦ-J-:r-.u--!L>4--*p9*A>A:ͮ8ҕ-ͦ-|-:7>ʥ-ͦ-Õ-!O>q*O>Mͧ**A:#"A:M>A:͞8-ͦ-ù-ͦ-*K>&i:) ^#V"u:>u:ͫ8.ͥ*K>&:) 8"M>͹-ͺ"u:-*K>&<) N#F.*0< ~R.*0< DMd5*0< *0<##N#Fq#p].*0<##q#p2P>:P>ʤ.*K>&:) 8"M>"9:P>O>Ҙ."9͹-2P>c.>5:08>͔8ʾ.q*å.>*5:DM\͔5\v5:w9Z.. \": -.:e /.*o9&\8_* DMe - /:w9#/:w92\\B5:9 A/. ~9\ -9/!"5:}28>27>*ͥ.:x9Z^/. \": -f/.en* -v/:x9ʌ/:x92\\B5!"5:}2R>ͽ"d:`:d:͞8(0͹/H02DMv0 q*!Q>6h!Q>/:Q>=O! *d:Nq*:Q><2Q>/:R><2R>0 q* q*0 q*̈́d:8+s#râ/ q* q*ͥ.!S>q> !S>O0:S>0Oq*Z0:S> AOq*!T>q:T>O60:T>O60!V>p+q*U>|O[0*U>}O[0*9>!=8"W>*W>!=8!Y>s:h0:Y>2h\͕60\>645*W>!=8!|s2*9͗8"9>. \~9 -0:9 1*9>"9>\d5͍0C\͏5!Z>s*9>!=8C "9*9*|9s#r͍0C*Z>&\8DM\͔5:j2j\v5:9ҁ1*|9)8"|9:y9ZŠ1a9ҟ10ñ1g9ұ10!_>q.*[> :_>w*[> ~!`>q*[> :`>w*[> *[> ^#VN#FR* *[> 6*[>^#V!=8"b>?8!a>s1!a>P2*[> DMv5*a>M1*[> DM͕6P2*[> DML5*b>!=8MͲ1*[>  *[> ͞8ҍ2*[>  *[> N#Fq#p *[> ~ڮ2*[> DMB5 *[> 61*[> N#F*[> *[> N#F͔51!e>p+q*[> N#F*d>?8^8*[>q#p*[>*[> 8+*[>##q#p*[>*[> N#F^#V?8*[> s#r *[> N#F`i"h>*[> N#F `i"j>*h>"f>j>f>͞8ڐ3*f>+*[> ^#V\8DM2_2*f>"f>\3*[> ^#V*j>\8DM2*[>  *[> ͞8Ҿ31*[> N#F*[> *[> N#F͏5!n>s+p+q*[>l>͠84 *[> ~4_2*l>DM2ͦ3Ê4*[>##l>͞8Ҋ4 *[> ~34_2*l>DM2:n>j4*[>  *[> N#FPY͹8d463g4ͦ3Ê4*[>  *[> ͞8҇41Ê4ͦ3!p>p+q*o>"[>!s>s+p+q*q>DM3*[> ^#V"]>*[> N#F*q>?8*]>:s>w *[> 6!u>p+q*t>DM3*[> ^#V"]>*[> N#F*t>?8*]>~   +5{>.+55OͲ5w66ͩ6́5;6<566́5͕6<>́5͕6<>645͜6<H66! w #ˆ5>Ö5>2,6""6"$6yo`"&6!"*6͋6-66*&6|6 "&6*"6MD6*$6DM:,65ͷ6g666Ͱ66**6|6U6*$645*"6""6**6#"*6ú56**6ABORTED$NO SPACE$NO FILE: $CANNOT CLOSE$DISK READ ERROR: $DISK WRITE ERROR$YYYP   YP6YPYPYPYPYPYP Ͳ ò!>6#6͐6">*>|$7>9ͫ8"|>##*|> ~!7!>6D7*>|?7!>66"|>D7!>6:>Y7!~>6#6#6Å7*|>~2~>*|> ~2>:>z7:>2>*|> ~2>!>6>!>ڰ7*>&v> ~/*>&: w!>4‹7:72"g:^ *:"|> *g:":*9My *9My *9My *~>My *>My *>My *|>":i`N#Fog_og_{ozg_ogDM!>))덑o|gV8 =D8DM!>))k8 =c8_{ozg^#V) ~8^#V|g}o ˆ8_{ozgi`N#Fogo&og_{_z#W LINK 1.31 $01/04/83?MEMRY$MEMRYX MEMORY OVERFLOW, USE [A] SWITCH$INSUFFICIENT MEMORY$OVERLAPPING SEGMENTS$ XXABS $$$XXPROG $$$XXDATA $$$XXCOMM $$$::;7;YYABS $$$YYPROG $$$YYDATA $$$YYCOMM $$$n;;;;INDEX ERROR$MULTIPLE DEFINITION: $MAIN MODULE ERROR$FIRST COMMON NOT LARGEST$COMMON ERROR$UNRECOGNIZED ITEM $$INDEX ERROR$NO MODULE: $SYNTAX ERROR$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(5ABORTED$DISK READ ERROR$DISK WRITE ERROR$CANNOT CLOSE$DIRECTORY FULL$NO FILE: $COPYRIGHT 1982, DIGITAL RESEARCH151282654321  {__2<!">> 2:2:>2=y2<> 2:2:>2=y2<> 2:2:x2=y2<> 2:2:> 2:2:>2:2:o&))))))))))a{__> W> W^ iI (Aڻ3ÛA2A_A2^n^nI (^iI (A3A2WA_HiI (^!0">2!4:N>2:!4ʱ!^!FNy;*DM 2:ږ6nI (^K<2:ʧ.ê!Kz:;*"71n:] \͂<i(2|!0T]͖\}͛2,n!6,nkiIY( <6%͛:A_s$B!fw# W:@!Bw:W!f@w2B͂<%0":o:g͖B}¸:<2:o:g"Ñnf:W@w͑f͌<%0":o:g͖fx%:=2:o:g"fn ^iCPM3 SYSCP/M 3 COPYSYS - for PMC-101 TYPE "A" drives - Version 3.0$Source drive name (or return for default) $Source on then type return $Destination drive name (or return to reboot) $Destination on then type return $Do you wish to copy CPM3.SYS? $Function complete$ERROR: Invalid drive name (Use A, B, C, or D)$ERROR: No source file on disk.$ERROR: No directory space.$ERROR: Out of data space.$ERROR: Write protected?$ERROR: Possible incompatible disk format. Type return to ignore.$ERROR: Close operation failed.$e file has been backed up (archived). The Archive attribute can be turned on by SET or by 1TdCP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH1512826543210123456789ABCDEF ERROR: $Reading file: $Writing file: $Directory full$Reading file: $Writing file: $Invalid drive.$) ? $) ? $) ? $Bad character, re-enter $ $ Disk read error: $File cannot fit into GENCPM buffer: $Unable to open: $BDOS3 BIOS3 Setting up directory hash tables: $ Enable hashing for drive $: $Unable to allocate space for hash table.$ Setting up Allocation vector for drive $ Setting up Checksum vector for drive $ *** Bank 1 and Common are not included *** *** in the memory segment table. *** $Number of memory segments $ CP/M 3 Base,size,bank ($) $ Enter memory segment table: $ Base,size,bank $Zero length segment not allowed.$Bank one not allowed.$ ERROR: Memory conflict - segment trimmed. $Memory conflict - cannot trim segment.$ ERROR: Memory conflict - segment trimmed. $ ERROR: Memory conflict - segment trimmed. $ CP/M 3 Sys $ Memseg No. $ Bank $ Accept new memory segment table entries $Default entries are shown in (parens). Default base is Hex, precede entry with # for decimal $ Use GENCPM.DAT for defaults $Create a new GENCPM.DAT file $Display Load Map at Cold Boot $Number of console columns $Number of lines in console page $Backspace echoes erased character $Rubout echoes erased character $Initial default drive ($:) ? $Top page of memory $Bank switched memory $Common memory base page $Long error messages $Double allocation vectors $Accept new system definition $ CP/M 3.0 System Generation Copyright (C) 1982, Digital Research $ BNKBIOS3 SPR$BIOS3 SPR$BNKBIOS3 SPR$BDOS3 SPR$RESBDOS3 SPR$BNKBDOS3 SPR$ 64K TPA Copyright (C) 1982, Digital Research *** CP/M 3.0 SYSTEM GENERATION DONE ***$!Tq:UM*T&!Tp+q:Ud*T !Tp+q*T#6:UҀ:Tڀ*T *T#N! *T6 7 7!Tr+s+q+q!U6N*TDMN:TTN͜:T.:T/!U!]6 !m6 !Tp+q *T 6 *T 6*T!Tp+q*T!Tp+q*T!Tp+q*T] ͧ!Tp+q*T} ͧ!Tp+q*T ͧ *T 6!Tp+q*T!Tp+q*T! ͧ!Tp+q*T" ͧ!Up+q*T$!Vr+s+p+q+q:V *V*VDM*V -- !Vs+p+q:VJ *V*VM!VLS!Vq:V e > :Va/>z!V/H҄ :V_2V:V!Vq:V/>!V/HҦ >ͧ>!Vp+q(7*V~ Y7 N7NTe:T *TMV Y*Vw!Vq:VO! N7:VO! N7!Vp+q 7*V|O *V}O H7!Vq*V&+SDM$ !Vp+q!V6!V60!'"V>V͇S† *VM7 !V6>!V VVzSڽ !V6:V<2VVVzS+s#rÔ :V *VM7!V60*V! S"V:V<2V‹ !Vs+q(7:V  #7*V&DMZ  *VM N!Vs+p+q+p+q :T: ͜*V6:V<2VO!T NV 2V  :V,u *V#"V*V6!V6 :V#… !V6  :V02V:V> !VHҽ >!VҸ :V2Vý !V6!V:V *V^*V&+S*V& *Vq !V6*V6ͧ *V6? ͜*VDMN*V~  (7*VN !V6>!Vn *V#"V:V:-Q/HX *V6d ,7*VN :V<2V, *V++"VNÊ *VN*V !V6!V6Te!Vr+s+q:-Q/Ү >!V6#q#p!V6:5Q!Vڳ*V&+SFQ  VzSک:VM*V&+SFQ  ~*V&+SFQ  VzSHJ:V2V*V&+SFQ  ^#V"Vé*V&+SFQ  ~*V&+SFQ  VzSHҩ:V2V*V&+SFQ  ^#V"V:V<2V¿ :V:VH`!V6:5Q!V`*V&+SFQ  VzS/*V&+SFQ  ~H*V&+SFQ  VzSHV:V2V*V&+SFQ  ^#V"V:V<2V:V!$V6!U6ͬ#Q$!H> U͇Sʔ* U|2Uß*U|2U!U:.Q2T*U|!UO:/Q2T*U|O:T2TUTI:-Q/!$V>O:T2T* U|O:T!$V2T:T=2T* U|O:T2TҮ:-Qқ*nV*U*V |!UO:/Q2T*U|O:T2T2Uͬ:U/Ҙ!!V6>!!Vژ*!V&$SQ  6:!V<2!Vsà!U6:V/ҫ*:U2T:T2TTͩ:-Q*T&+SDM*U*T&+SDM*U:-Q/&:U2!V!""V*!VM"V͟:!V2U! U6Û*U|!U2!V* U|!Uo&)##""V*T&+SDM*!V*!VM"V͟:!V2 U:U2!V!""V>T͇S+s#r*!VM"V͟:!V2U* U|!$V2T:T2T U(T(TͩC*$V&+ST͊S+s#r* U|!$V2!V:-Q/ *T&+SDM*!V"*T&+SDM*!V*!VM"V͟:!V!Uw:-QҢ!T6:T2TULTLTͩ*U|2!V*U|!Uo&)*"V""V*T&+SDM*!V*!VM"V͟:!V! Uw:,Q/Ҳ:V2V *V&U  :T2T*T&! S!0*V& U q*T&! S0*V&!U q:V 2V*T&+S"!U$-U RUW !T6#6#6:.Q2U:/Q2UTqT TyT Uͧ pT !T6Uͧ pT pT :;Rһ!;R6:%V2.Q:4Q/24QTT TT L!U6N!Vr+s+p+q*V6 *V#6 *V|O! *V## w*V|O! *V w*V}O! *V w*V}O! *V w!T:TO`iPSW "V*V :0Qw*V :2Qw*V :1Qw.*V :3Qw*V :4QwX*V   :+Q/ҼW*V >*V w:@*V wW*V >*V w^*V :/Qw!)X"V*VN#F!W "V*V"V*V͕S(!$V6-!$V6*VSD*VWR!"&V!V6&VS!V6>!Vڷ*V&)*&V>͒Sʭ*V&)*&VWR"(V*(V ͕Sʭ!V6:V<2Vf:-Q/!V!$V6!$V6V>X W*V"V*V~>>!Vs+p+q+p+q%N*VDMN 7*VDM$  7*VME :,QҨ *V&U *VDM :V 2V*V&U DM*V:V2V*V&U *V&+S:V2V*V&U ) :V2V!Vp+q*V"TͣN,ͧ*VDM !Vr+s+p+q*V^#V"T*V##^#V"T*V ^#V"T*V#DMT  *VDMT *TZSU͊S@?ͧ*T+ZS}<2V!V6!V:V҆*V&+SW "TDMͧ *VDM> :V<2VS*TDMO W*T"T!Vr+s+q:VGTqT TyT *Vn}2T*V#~2TpT WTS}pS}TR+s#r*V&)+!Vs+6:V!V4>T͇S+s#rBKͧ pT^ :V<2VpT *VT :-Q/k)Tw T z!LT"V!U"V͙!T"V!U"V͙!(T"V! U"V͙*V#DMT  *VDMT *VDMeͧWͧ *VDM> *V*Ws#r*V##*Ws#r*V *Ws#r*VDM> !V6&VS(>!V6>!V*V&)*&V>͒S*V&)*&VWR"(V *(V## *(V ͕S*(V ͕SH*(V ͕SH*(V ͕SH*(V ͕SH!V6:V<2V-:V!V6!V6!V6>!V*V&)*&VWR"(V*V&)*&V>͒S*(V S?!V6*(V ͕S:V/c!V6N:VO!=R ~2T *(V WR"*V**V N#F`i))"VN:VAO7N*V&6Q DMʹ ͜*V&6Q ~/*(V q#p:-Q/!V6*V&,V) *Vs#r*V*LV"LV*V͛ 2V'ͧ*V&+SFQ  *(V w*V&+SFQ N`iPS*V&+SFQ  N`iPS*V&+SFQ  ͕S *(V q#p*V&+SFQ  VzS*V&+SFQ  q#p:V<2V:-Q/!V!$V6:T<<2T:T<<2T!V6>!V8*V&NV) >w#6*V&pV) >w#6:V<2V:!Vڡ*V&)*&V>͒Sʗ*V&)*&VWR"(V *(V WR"*V*(V ͕SN:VAO7:7!V6**V ^#V!S*V&+S*V&NV) q#p*V&NV) nVR+s#r*(V ͕S—'N:VAO7:7!V6**V >R!S*V&pV) s#r*V&) VR+s#r **V R*V&pV) CS **V q#p:V<2Vk:Vҫ͜:T2FQ!T:/Q2GQ!"IQ!HQ6!V6ON:GR2T 5Q N*FQM ,7*GQM ,7*HQM N:V/҈!N!V6:5Q!V !V6:V/ :V =O!=R ~2T*V&+SFQ DM *V&+SFQ  N`iPS*V&+SFQ  q#p*V&+SFQ  ~ͧ *V&+SFQ  ~7ͧ *V&+SFQ ~2V*V&*V&+SFQ  N "V*V|*V}O:/QH҆MN!V:/Q*V&+SFQ  Hq!V:/QO`iPS*V&+SFQ  q#p *V}2V!V6!V6!V:V# *V&+SFQ ~2V*V&+SFQ  :V2V*V&+SFQ  *V&+SFQ  !V:V/+~!V/H+ |ͧ!V6 :V!V+~!VHc N*V&+SFQ :Vw!V6 :V!V+~!VH N!V:V*V&+SFQ  Hq!V:VO`iPS*V&+SFQ  q#p!V6:V<2V×1:V<2V"͜!V6:5Q!Vo!:V!N!N:V=O *V&+SFQ NE *V&+SFQ  NE :-Qb!N*V&+SFQ  N ͜:V<2V !T6!V6%NVʹ ͜PNT2V!TT TT N!V6Vʹ ͜:V!FT !!U6+6!W6͌!:W/җ#:R2T͜N;Rʹ :=R2T͜͜N,Qʹ ͜͜:>R2T:2Q<22Q  2Q :2Q=22Q:?R2T:1Q<21Q' 1Q :1Q=21Q:@R2THN3Qʹ ͜:AR2TkN4Qʹ ͜͜:BR2TN:0QAO7NTe:T"*TMV A2W*WM͈ /"Þ":W20Q͜͜:CR2T.Q *.Q&PS"U:DR2TN-Qʹ ͜:-Q/2T:-Q[#:ER2T/Q ͜:FR2TN+Qʹ ͜x#:R2T͜N!W#*W&U 6:W<2W#!W6>!W $*W&U 6$:W<2W#!V6*V&U  !V6TqT TyT Wͧ pT^ pT^ WS#ZS"U!W6>!Wڋ$*W&,V) >w#6:W<2Wh$!"LV:]A$!U6#6!W6>!W$*W&=R 6:W<2W¦$$!U6#6:mD$!U6!T6 Available space in 256 byte pages: $TPA =$, Bank 0 =$, Other banks =$Unable to allocate Dir deblocking buffer space.$Unable to allocate Data deblocking buffer space.$Unable to allocate Data deblocking buffer space.$Drive specified has not been defined. $0FFFFH is an invalid value in the DPH directory BCB address field.$ Setting up Blocking/Deblocking buffers: $ The physical record size is$: $ *** Directory buffer required *** *** and allocated for drive $: *** $ Overlay Directory buffer for drive $: $ Number of directory buffers for drive $: $Minumum number of buffers is 1. $ Number of directory buffers for drive $: $ *** Maximum number of directory buffers *** *** for the current drive is$. *** *** Number of directory buffers reduced *** *** accordingly. *** $ Share buffer(s) with which drive ($:) ? $ *** Data buffer required and *** *** allocated for drive $: *** $ Overlay Data buffer for drive $: $ Number of data buffers for drive $: $Minumum number of buffers is 1. $ Number of data buffers for drive $: $ Share buffer(s) with which drive ($:) ? $ Allocate buffers outside of Common $ Accept new buffer definitions $!W6>!W**W&)*&V>͒S**W&)*&VWR"(V ͕S*(V ͕SHҸ* *(V WR"*V**V ^6 *W&$SQ q#p*W&$SQ  6*(V ͕S*%ͧ!W4*!W6>!W+!"HW}2W>!W=+*W&$SQ HW|S ~H6+*W&$SQ ^#V"HW!W4**W&))lW *HWs#r*W&))  >w#6!W6>!W+*W&$SQ HW|S>͇SH+*W&))lW  *W6 DS+s#r*W&$SQ  6!W4h+!W4*!W6>!W7,*W&+SFQ  *W&W) N#Fq#p*W&+SFQ  *W&7W w!W4+:-QF,!fW6K,!fW6 !W6:W4:fW=2iW!"gW"dW}2 W! W6*T&PS*LViS"bW:-Qڞ,nVbWzS*ViS"bW!W6>!W,*W&W) *W&+SKQ  N#Fq#p*W&$SQ  6!W4£,!W6! W6#6!W6n&))lW  ^#V"JW*W&))lW >͒S:WH3:WE-1&N!W6]&N*W&))lW N#F$ {&N!W6>JWR>fS:WHҚ-!JWVS+s#r!W4g-!JWVS+s#r:W3*W&)*&VWR"(V WR"*V >RZS"^W **V ͕S-!W6-!W6*(V ͕Sc0bB*W&$SQ  >w:-Q.: Wd.! W6*W&$SQ  6&N:WAO7&N.:W{O!=R ~2T&N:WAO7'N*W&$SQ  DMʹ ͜*W&$SQ  ~.*W&$SQ  6.*W&$SQ  6t/:W;O!=R ~2T'N:WAO7>'*W&$SQ  DM  : Wt/! W6*W&$SQ  ~t/A'ͧb'N:WAO7'*W&$SQ  DM  &/*W&$SQ  ~^W͇Sҹ/'N*^WDM$ 'N*W&$SQ  *^Ws*W&$SQ  ~R0:W[O!=R ~2TM(N*W&$SQ  ~AO7(NTe:TL0*TMV A2 W* WM͈ *0/* WMF80/*W&$SQ  : Ww͜c0*WMTCc0 4*(V ͕Sn3!W6*W&$SQ >͒S°0*(V q#p*W&$SQ  6n3bB*W&$SQ  >w:-Qګ1: W1:W1! W6!W6*W&$SQ  6(N:WAO7(N1: W1!W6! W6:Wʨ1:WƋO!=R ~2T(N:WAO7)N*W&$SQ  DMʹ ͜*W&$SQ  ~ґ1*W&$SQ  6è1*W&$SQ  6! W6S2:WKO!=R ~2T)N:WAO76)*W&$SQ  DM  *W&$SQ  >w: WS2! W6*W&$SQ  ~S29)ͧZ)N:WAO7)*W&$SQ  DM  2*W&$SQ  ~$3: WҌ2! W6*W&$SQ  :Ww 3:WkO!=R ~2T)N*W&$SQ  ~AO7)NTe:T 3*TMV A2 W* WM͈ 2Ü2* WMF2Ü2*W&$SQ  : Ww͜*W&$SQ  :Wwn3:U!W]3:W+O!=R ~2T)N*W&$SQ  DMʹ ͜*WMTCn3 4! W6*W6 dWDS+s#r!W4>JWR>fS:WHҿ3!JWVS+s#r!W4Ì3!JWVS+s#rç-!W4n&))lW  ^#V"JW-!T6!W6:W 4bB)NWʹ ͜P,!"PW}2Wo&"TW2W>!Wu5*W&$SQ  ~n5*W&$SQ  ~ >Hһ4:-Q|4!W4á4*W&$SQ !^N#F-S*TW"TW*W&$SQ  ^*PW"PW*W&$SQ  ~ >Hn5:-Q/5!W4*W&$SQ  ~,5*W&$SQ !^N#F-S*TW"TWT5*W&$SQ !^N#F-S*TW"TW*W&$SQ  ^*PW"PW!W4#4*fW&*PW+S*W&) "RW:-Q9W*U"jW*RW*U*TW *LV *V *nV |O:.QO:T2UO:T2T:T2T:T2T|2U!T2.QW"T*T&PS*U "ZW*RW "VW*T"`W*`WW !T͕SC6*`WW 6*`W#"`W6!W6n&))lW  ^#V"JW*W&))lW >͒S:WH9!W6>JWR>fS:WHҶ6!JWVS+s#r!W4Ã6!JWVS+s#r:W8*W&)*&VWR"(V*W&$SQ  >«7*W&$SQ  ~h7*jW6 *jW *VWs#r*W&$SQ VWR+s#r*(V *ZWs#r:fWZWR+s#r:fWjWR+s#rë7*(V"LW*W&$SQ  n&)*&VWR"(V ^#V"NW*LW"(V *NWs#r*W&$SQ  >£8*W&$SQ  ~48*jW6 *jW *VWs#r*W&$SQ VWR+s#r*(V *ZWs#r:fWZWR+s#r:fWjWR+s#rã8*(V"LW*W&$SQ  >o&)*&VWR"(V!Q  >ʂ8*(V ^#V"NWÐ8*(V ^#V"NW*LW"(V *NWs#r!W4>JWR>fS:WH8!JWVS+s#r!W4ç8!JWVS+s#r6!W4n&))lW  ^#V"JW\6!W6>!Wc9*W&,V) >͒S\9*W&)*&VWR"(V *VWs#r*W&,V) VWR+s#r!W4 9!W6>!W9*W&)*&VWR"(V*W&NV) >͒Sʽ9*(V *VWs#r*W&NV) VWR+s#r*W&pV) >͒S9*(V *VWs#r*W&pV) VWR+s#r!W4h9aB!W6>!W::*W&W) *W&+SFQ  N#Fq#p!W4:*V*RW*nV "RW> U͇SUzSH҇:*TW*U|O:.QO:T2Uá:*TW* U|O:.QO:T2U!U:T2T:T2T:T2T:.Q2.Q* U}pS} URU͊S"`W> U͇SUzSHB;*RW|O:/Q2T*U}pS}URW"\W*T&PS"XW*T&PS*U "VWÇ;*RW*`W|O:/Q2TW*U"\WO`iPS*`W "XW*T&PS* U "VW*RW*\W"T*U|O:T2T*W&)*\W"jW*XW"ZWWTS"U*T"`W*`WW !T͕S;*`WW 6*`W#"`W;!W6!W6!W6:5Q!WS<*W&+SFQ  2W!FQ  ~:W!WHL<:W2W:W2W!W4;:T2FQ!T:/Q2GQ:W<*W&+SFQ  O:T<*W&+SFQ  N`iPS!͕S"`W!FQ :T w*W&+SFQ  N`iPS*`WiS!q#p!W6n&))lW  ^#V"JW*W&))lW >͒S:WHғA!W6>JWR>fS:WHh=!JWVS+s#r!W45=!JWVS+s#r:WxA*W&)*&VWR"(V*W&$SQ  >0?*W&$SQ  ~>*(V"LW*W&$SQ  n&)*&VWR"(V ^#V"NW*LW"(V *NWs#r0?*\W*ZWs#r*(V *XWs#r*XW##"XW*\W##"\W!W6*W&$SQ  ~!W ?*W&$SQ ^#V͛ 2W*jW6*W&+SFQ N`iPS!N`iPS!͕S  *jW q#p *jW 6*W&+SFQ  *W&$SQ |S+s#r:fWZWR+s#r *jW s#r:fWjWR+s#r!W46>:fWjW͇S+s#r! >w#6:fWjWR+s#r*W&$SQ  >1A*W&$SQ  ~¤?*(V"LW*W&$SQ  n&)*&VWR"(V ^#V"NW*LW"(V *NWs#r1A*\W*ZWs#r*(V *XWs#r*XW##"XW*\W##"\W!W6*W&$SQ  ~!W A*W&$SQ  ~ҩ@*W&$SQ ^#V͛ 2W*jW6*W&+SFQ N`iPS!N`iPS!͕S  *jW q#p*W&+SFQ   *jW w*W&+SFQ  *W&$SQ |S+s#r@*jW6 *jW *VWs#r*W&$SQ VWR+s#r *jW 6:fWZWR+s#r *jW s#r:fWjWR+s#r!W4?:fWjW͇S+s#r! >w#6:fWjWR+s#r!W4>JWR>fS:WHhA!JWVS+s#r!W45A!JWVS+s#ru=!W4n&))lW  ^#V"JW=!W6>!WA*W&7W *W&+SFQ  w!W4˜A!W6>!WaB*W&)*&VWR"(V*W&NV) >͒S"B*(V *ZWs#r*W&NV) ZWR+s#r*W&pV) >͒SZB*(V *ZWs#r*W&pV) ZWR+s#r!W4A!"W"W!W6:5Q!WB*W&+SFQ  ~¶B*W&+SFQ  VS*W"WB*W&+SFQ  VS*W"W!W4pB$N%N!bWVSDM$ :-QMC%N*WDM$ :U C$%N*WDM$ >W͇S>W͇SHHC!W6MC!W6͜͜!Ws+q*W&$SQ ^#V"W:-QڋC:fWWRbW͊S+s#rF!iW55:W®D*W&$SQ  ~2W!W6:W!WګD!fW:iWYD!iW6*gW#"gW!W6!W6!W6:5Q!W7D*W&+SFQ  2W!FQ  ~:W!WH0D:W2W:W2W!W4C*W&+SFQ  S+s#rcD!fW:iW2iW*W͛ 2W…D4%ͧ>äD*W&+SFQ  WzS+s#r!W4±CF*W&$SQ  ~2W!W6:W!WF!fW:iWoE!iW6*gW#"gW!W6!W6!W6:5Q!WME*W&+SFQ  2W!FQ  ~:W!WHFE:W2W:W2W!W4D*W&+SFQ  S+s#ryE!fW:iW2iW*W&$SQ  ~ڼEWbWzS+s#rYS:/QpSҹEd%ͧ>E*W͛ 2WE%ͧ>E*W&+SFQ  WzS+s#r!W4D>!Wq*W6 dWR>fS'F>%ͧ>ERROR: $ at line $Missing parameter variable$Equals (=) delimiter missing$Invalid drive ignored$Invalid character$Invalid parameter variable$!"WWͧ !W6!W6:W GG:WG͈K2W:WFIGF GF!Wr+s+q:U2W!U65FN*WDMN>FN*WDMZ :WCG.͜:W2U:WoG!W6TlG!W6sG!W4MG*W&W ~2W:W :W H:W HG:W ·G*W#"WMG*W&W ~2WÄG:Wa/>z!W/HG:W_2W:WG!W6:W!W6:W/:W/HI!W6>!W/H*W&W 6 !W4HtG2W!W6:W:W=H:W H:W/H~H*W&W :WwtG2W!W4:H:W=:W H:W/HҧHtG2W~H:W I:W=>!WHH!W6 I:W=HHF GH:WHcF G:W :W/H ItG2WHGtG2W!W6!T:W:W H:W/H[I*W&T :Ww!W4~`i+wtG2WI:W :W/HxItG2W[I!W6#6>!W҇K *W&+S P  ^#V"W! P  ~2WJ:WI:WA2WI:W0/>9!W/HI:W02WI:WA 2W *W&+S P  ^*W&+S*W"W*W&T ~?[J *W&+S P  :WO!=R 6!U6!W4!T5>!T҇K:WʧJ*W&T ~A/>P/HҜJ*W&T ~A*WwäJF GÇK:WJ*W&T ~Y*WwÇK!W6*W6!W6:T=!WڇK:W!WO!T ~2W, K*W#"W6!W6ÀK:W#K!W6 ÀK:W02W:W> !WHQK>!WLK:W2WQK!W6!W:WxK*W^*W&+S*W& sÀKF G!W4J!W6!W6:W:W/HK!W6:W *W&+S P *W& *W&W HK!W4éK:WK!W6K!W4ÒK:WL>:WWͧ T. T~ !W6!W6>!WN!W6#n& +S P  ~2W!W6:W:W/H N!W6>!WڞL'N *W&+S P *W& *W&W w!W4gL:W°L!W6L:WL:WA*W&W wL:W L:W0*W&W wL:WA *W&W w'N*W&W 6 'N*W&W 6='N*W&W 6  *W&+S P  !^*W&+SR"W:WmM'N*W~A*W&W wM:WʞM'N*W~ҐM*W&W 6YÛM*W&W 6NM*WNbN:WM'N*W&W 6,*W#"W*WNbN'N*W&W 6,*W#"W*WNbN'N*W&W 6 'N*W&W 6 !W4PL!W4'L>!W NT^ T :W]NT^ !W6>!WUN*W&W 6!W4:N!W6aN!W4!Wq'N:WO! *W&W w'N:WO! *W&W wO*TDM}oN*T†O]!O> 2 PW:TgxʀO { O: PO*T!O†O~#o}o|O<O:TzO<.O:TƜzO<8O:TzO:TzO:TotOzO:TgN!|!|PRTMSG ,QPAGWID 2QPAGLEN 1QBACKSPC 3QRUBOUT 4QBOOTDRV 0QMEMTOP .QBNKSWT -QCOMBAS /QLERROR  +QNUMSEGS  5QMEMSEG00 KQHASHDRVA6QALTBNKSA +QNDIRRECA ;QNDTARECA KQODIRDRVA [QODTADRVA kQOVLYDIRA {QOVLYDTAA QCRDATAF ;RDBLALV ))덑o|gS =S^#V))) DM!>)):S =2S_og^#V) PS^#V|g}o ZS_{ozgO{ozgi`N#Fogo&og_{_z#WBNKBIOS3SPRRESBDOS3SPRBNKBDOS3SPRCPM3 SYSGENCPM DAT . $ɀSAVE SAVE y<1!~ʋ;:* ͩ".~>2`*.h~`>26!*#~2#~2r+s-* 1!~ʀ#_6|ʉ#6?#6 #6$\<8Y‰\>!|w\:V"8: V "**Ͳ\h}}€!*:2\<T}Q**#s#r>2:Ÿ*.h6 1>2::>2}2|2!"  !!\( yŽw=G::xAڎҎa{!_Î 4 4(!~> L5*~#"a_:f7ñ8 ʱ0vñ@7ñ҇0ÒGڐ7ñ7o:O& ʦ))))ÛzW{_f: CP/M 3 SAVE - Version 3.0$ Enter file (type RETURN to exit): $ Delete $ Beginning hex address $ Ending hex address $ $ ERROR: Bad close.$ ERROR: No directory space.$ ERROR: No disk space.$@$ $H I$I!$HI"$$"$ I ! A  !B B@@ $ABH$!"D$"B:>2 CP/M 3 DUMP - Version 3.0$ ERROR: File Not Found $ Enter Password: $ Password Error$ ERROR: No Records Exist$ Press RETURN to continue $,yÙCP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282CP/M 3 SID - Version 3.0$1 !~=W!x ~#ôbx {~#o}o.ÃO$ y͏ , $  ͌ 9!z6 # L!zw͌j# X:z 0 ͘=N#Fy}80*z{¯#z+++ ¥ z#½# · 9!`͠ y9!rͷ y=!z{w# % w!P͠ y͓}*w#"͌ @.@<!Eͷ~P !ͷ’P͌Q!ͷªP}QxQ!ͷ͓G@Q! ͷ y͓Gþ!ͷ ͓Q!ͷ͓Q͌Q!.ͷ6y#G͙Qà!2ͷQ͓͌Q!>ͷq eg͙Q:zJEËC–EQyQxQRQ** {zҷ*~#" <AOGƐ'@'OxƐ'@'ON# z8O!B N#N ¾SP.* |} !9":q!"28!"9:] ,:e &͟:l &:u &ͮ!I 1lĤ>#J ,!6-X5AڔҔ_!o^#V - G  + Q  1ͳҔ~½:,=”͍" ,~ڔʔ͍=͍=͍!,o͍ "c=͍=”)*c)!"f,*f*c"h ,*cL>::ʗ^#V#L cxZy y~ #*f ڵ™y ¶"c:,*hT*f , ,T:e,>2e,:ʔ%:e  ͟:u ' ͮ!I Y|”,,}5 2l~2m͍͍"n͍"pDMs !l6ʏ } "v=ʏ =ʏ YP !~ #^#V:l *v{ z "r~62t #w6 ” 1l*v*t!~4 #~#F# x ~#s#r#w>~ʽ ͍=; =”͍Lᯕo>gL,>#!u^#V#0}o|ge X x| y0ʃ GÏ yÏ  G| Q z,{ ,<,>'{>',*##V+^+N+y,L ~+ , :”%,ͳ~ ͍" = ͍"=”" > 2,Y,!|G }G , w#. ~ڔ ͍!=:r ”͍| !| !|”"!~ʩ #~#V§ z§ :w, ‰ :ʔ!~ :w#s#r, ¾ Ô!~ : 6 ~#^#V ,:ʔ!\6#>  w# ' >w# 1 6~!I =”*"!l6~# T :]?2 7ʔ!">HXE͆*ʾ \ͤ2 w# ™ ͥ͝* ҆ !""Ô\ʔ:¾ W$ _$ $ O { x! i`"v2 $ $ w# $ ͥ͝”þ \̀\̀ GтWx!͓B :>ULT͆!6\~# S 2|:] !7<ʔ\ !t   _*\ ʣ \ w Ø *+\ !ڔw{Ҕè *#^#Vr+s+6͓Ҕ*"s#s#rt ! *v*",!*L*L*vL*+L,o=”͍L:X^#VL\~J ʯ.y:,>."Ž! ;w#́=”͍:ʨs#r#;”}w#:;#;>>2o!"#͍}ʔ==”͍""2mNl :ʔ!\>2|!"*"~:8”*"*"*͠ڔ!"\zn<ʔ*ͯ~# _\V”*#"͠:W\J!*L!,:2:2>2::>2 N, !9# Ô ”J~,=”͍xA|”}ҔgA>;Ag};,;Q|”}!qw,s#r,:[|_!~ʐ![4Ð\ͤŽ2[g>>?,!e>Cw#>Ow#>Mw!u>Sw#>Yw#>Mw., * ͽw#  ͽ  * ?r# {zPY! |}>2!""!Ow #w 0q!\6 ͤ!"~”͍͍͍!6W6!6# ,œ>2ß͓ͣ ͓ͣ ͓ͣ ”ʔ   :@w# G6#. 6# x!a_!~> 55*~#"ů2[\ͤͤͤͤͤͤ!ex#y#*}|͓"*}|":!͓> _ͤ~# 07> >  ͤL:8>.^+~+:8*>:|}^ >.*f}o|/+- , 0 Ô^#V#*NyҔ** n +ñ q#^#V""~/o>g++Û!.ʔ@͔^#V= ͔^'D! ڔ'?!q'”S_&#hqf0 Ҕ)DM)) O I^*r^#V#^q̀))))oqh"s#r#!4-®+»*+ þ-y_xWþ!IXN!p~ !D_^!x^#Vx1>-~~>=G!q~L!9#x sYYͳғ*v" !6û+"f*v~#cڻʷ^#Vû~*v~Gx5@xv5 x805 x6 45>=*t~*t$5x*l$*n:585"CZMEIABDHSP!"2"t+"v!91t*v~:t2l!~ʐ#^#V#~ ƒ!~6ʳ=G#^#V#~xâ#"v!N#FN*>7l :|!~9#~#V*v9z9~==2wͲ:l <!*vNl  |Ͳd=Xl *v5Nl :l|*pMD*n:m7l !"N2>**vͳҟ" *t"c, PASS !~*+"|w=2~ !~##Z:t*rw2t*vF#!s! ^#V&N&N,`r<¦Gæ::^#V#2*r^#V<[>èæxjê8_æ*t2¦,:?*v###æG>è><7*|!N*v!>#> :!>=_~/w/w{G=YP"*##F+N+~a/o>g{\z\<33=>!y$ڇ *y$&>'d !y$4d SYMBOLS NEXT MSZE PC END 6!z$q!h#6?! h record(s) written. h#H!:#A{$O !:h# !2h#!@ !:h#S:h#QHP!:#<2|$2h#:h# HG!)!2h#Ô!2h#02|$O> j!!|$6Ô!2h#02w$O> @!!BH @@ABH B! "BHI$$BI$BI $ HI D$HD$$ H B!$D$"$B$DA!ABI$H B$I $HI$H$! $I $I$I $I $BBHHA"HI$H!$HH$ IDH$$H$"BD $$$HH$B@@D!@H" H " "BI$DI$I $H @HI"$AD@@HA$ $@ $@D IB!  $H $I$$HD H!"A""! I$DDI"I$ @$I"DH BH" !I B  B$H$@"IHBI $$@H@ @@@D !@BA$!" D!$A$B@$@@$"$"@  D@@"DH $I!"DH$BB$"H@ $!D$$I$I$$"A$$I  D UUTH@@!@H@ !$  ID Syntax: SID {pgm-filespec} {,sym-filespec} Explanation: The SID symbolic debugger allows you to i!v"/!Q/+>c!K-6*/K>XG!+>yC!Q/+>c!+Q/>r–!}o|g}ʖ!#"/!/–!/ʖ!/+>c!/ͷ~g"B,U"G-!,,> c!o0ͷX:F-!,,> c!q0ͷ~*G-w#w:F-X!s0͡!F-6*G-*G-^#V#)))"I-*B,*G-^#V))W+"B,*B,>og"@,:F-f!,,> c!y0ͷ~!{0!+Q/>r2K-*I-w#w2P/>2O/2N/!/(,>t!"N-:F-X!D,LG!),>y :#!#6!Q/D,>_:O/!N/:N/2O/2N/!P/4!}0!0*L-#"L-!0A !/*!/>X!/>Xt!D,KLG!.,>y:O/!N/f:N/2O/2N/!/>X!.,!,@!D,KL(,tî!N/4!,/>c!0!0!0n !N-~#!0̓ ã!0ͬ!D,/,>c!0~U!9"0:#Z!#6!#"/r*/>$Gt!##>Gt!#0,>Gt!#6!#6!#"0!0T!F-6!"#!D,6!06:0}͐3>!D,ͧd*0!F-6!#6*##"#*# |.!"0}20!0>!#*0"0!0U!#"0!0+!#*06*0 "0!04í!"#:+.!+6:# :# :#.~!#*#~20:0 20:0Q~:0Þ:K-z"/!0Ur"/*/ 3,>Gt!0#!D,6,> c!0ͷ~Ͳ"0~# ¦*0^#V"0*0^#V"0͕!1"1!216>261251:!12:1::1!51!!1:51og~271:21!216{:71!61281*0:61o:81OLG!1>c:81og>og}281*0:81ogW"0*0:81og####"0*0*0W*00>c*0";1!;1ͷ~>291!1n&}2=1:=1!91*1:91og"1*1~og |*1>ߦw*1~?*16_*1~@*16`!914å*0++*0)"1*11>_*0^#V"31*0^#V#r+s*1*0*0^#V)))s#r*0:61_L*0*0^#V)))>t*0*0^#V)))w#w!31#`*0*31)))^#V1j`*0*0^#V)))"1*1!1>Gt*0*31)))"1*1*1>Gt*31+"31*0*31)))^#V1j!31#T*1"1*0*31)))"1*1*1>Gt*31+"31*11>Gt:71%^}2C1:C1!A1$ *0:A1_LG!>1>t!0>1xy!0>1xy !B14:A1!!1:B1ogw!0>1xy :B12!1!A14ì*00>c*0"D1!D1ͷ~^#V"F1*F1^#V> ͍!H1 *!H1> XÓ1~# s !9"2!1"1!16*1w#w*1ng | *1KLG!1>yº !1**1~ogQ1~og)1^#V*1^#V#r+sH !11>c !1*>22*1~ogQ1~Y !11xyK !24H :2K !1!1> !1* *1*1^#Vͯ1>_ *1~ogQ1~ !1*{ !1*!11xy !1*é !1**1~ogQ1~ !1* *2:1 !16!"1*1n&"1*1"1' *1#"1*1*1W7 *1*1>Ó*1~og |c !1>ߦw !1~?t !16_ !1~@‚ !16`Y2 ~# ˆ *_2^#V"e2*c2^#V"g2!"2*[2^#V"2*2*2W *]2*2ͯ"2!2 :2 *e2*2)))~# *g2^#V#*e2*2)))s#rc *e2*2)))^#V"2*g2*2))~#K *g2*2))^#V"2% *g2^#V#*g2*2))s#r*g2^#V#r+s*a2^#V*g2^#VW !i272>!c!2ͷ~*2+|´ *Y2^#VO"2þ *Y2^#V"2*2*g2++*g2^#V))s#r*g2*g2^#V))w#w*2#"2ô 2~#  *26*2LG!X2>yC *2"3*3#~>!3w:3og2~C :2 !26*e2^#V#"3!3"323!3> *3++| !"3Ñ *3>og"3*3:3og)2s#r!34d !" 3*e2^#V" 323*2"3!3"3* 3* 3W_!34:3og)2^#V" 3*e2*3)))^#V"3*2*3j/*3+" 3* 3* 3"3!36\*3*2jY*3#" 3* 3* 3W"3!36\Û :3o* 3"3u* 3"3*e2*3)))^#V"3*2*3jʛ*26*3*2s#r3 ~# ±*3^#V"#3*!3^#V"%3! ÷>2.3*3~ʟ*34*3~og"3!3A !/3*!/3>XG!3>y.!/3>X3t!/3>XG!3>y[!/3>X3t*3!3>}23:3ʐ!/3>S*3:3<_Lt*3"3!3ö*33>_*3"3!3!;3"93!3*3>!t!<3"53!L33>Gt!Q33>Gt!"'32.3*'3*#3^#VW*'3#"'3*#3*'3)))^#V!<3>p!")3*)3 |*53+*)3"73*73~ ]Æ*73~_n*736?|*73~`|*736@*)3#")38*#3*'3)))!M3>Gt*#3*'3)))^#V")32-3!)3~#ʖ:-3 ͟!<33>t!M33>t2-3!-34*%3++*)3))^#V"+3:,31!Q3:-3ogͯ3>Gt*+3O"+3M!Q3:-3ogͯ3>Gt!3A !/3*!/3>S!L3:-3ogͯ>t*%3*)3))^#V")3ø͟!.34*3~!.3!t:-3ogͯ}!;3w!;3~w*93:;3=_L3t*93!3>_!3^#V"<:F4!F46*<KLG!H<>y+!E46ð!E46!4"$Gt!'4I<>Gt!*46!>46z"!4*<@*<"r2<:E4:<>2<>2<*Gt!^<<xy;!<8!<5!<͛#E!<͛!<5:22%^}2<:!4*<@*<"!4*<@*<"2<*t!<͆!<4!<͆^#V^#V  $ "/  Later CP/M or MP/M Version Required$*#=**#={ozgY|g}o!\!l!ÍÝ3>Ý!*3>K* !*   >    !"#$%(^#V^#VF3O3*# 72gl*<"?'w#-!9~sG~#s4! 9~.Y+60e0e6 #M+r>o&9y>o&90w+Š6./G! >0 >-3T]))iO>`G>0 <  DM0 > Ew#E~#X~#W #Ý!9Oo>gy~#o>gxGGtwF#"WObk++~+ y~#/~!>)< D=M)6ɯo>g{ozg!dÄ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;}|;{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>: >?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 End of Execution$#dd(Copyright (c) 1980 Digital Research V1.3MXList SYMd$PlPRINTER busy XREF 1.3 no SYM file no PRN file CP/M PRNXRFABORTED. V́ + 1@+>  FG1"z*QS cE5T @///,,D,B,G-,Q/D,D,L-,D,D,N-P-L-N-P-G-@,I-P/O/Q/G-I-D,000//D,symbol table overflow ' invalid SYM file format  { *$'symbol table reference overflow 22i2 0# +333lXRF.XRF make error  '.XRF close error .XRF write error <<<_<<ba{3 _à  F F : i`N#Fogo&og_{_z#WÞCOPYRIGHT (C) 1980 DIGITAL RESEARCH RELIRLFATAL ERROR$l$l1 ͺ!"!6͓*~=:!ͣ !6:/::!ͣ !6:!!/ͣ < ͧv! s+p+q> ͍"̀ځ*>! q** DM* 1q>> ͍+s#r=>!r+s+q+q+p+q> ͍"!6> !*&*6!4¦:! *w* * * DM -* *s#r*"̀*":*. Tu -". u -2:~ l:\.~ -Ql.~ -dup. du -zT!"u*M: *M: !6>}!: :<2¨#u{u>!͘,T>͍)*DMTT"*%DMu{̀+s#r;'*DMu{̀N*"'ͅ>v":2T2u:ҙu͟!6>!ڙ: :<2:ҦT͟:!/Ҵ:͍ >>l͍ >!͘:/H*!*"'*DMT{T:lͪ : >>l?: &#*DMu{:2:2u͉Tp*>@O>*>@*w*~!s+q*&%*& *&%*2& "*DMT*+"*DM3T"!p+q!\#s>!s:+&:2̀&ͣ :22ͧ!s+q+q*M*͍"̀̀Hm*DM̀%*& "!6|*#:w*##:w* :w!6!6\2!:!H÷:!!6l+6**͍!6\* ^#V""!3"$"!o2ͣ :< J.< -B3!6#6!6*#s#r!6\wl!6!6!6\ʒÇ.  -›!&6:!&:&=O! N,:&<2&©**pH*#N*##* ^N0Jͭ1 Gͤͣ  <_1D**M*0G!'q:w**M0*"!6}!6:'҄Çͭ1Ҙ**͇H* >͘ҿ:'/**M*0} <_1K!6#6#6:  . - 12(:( T}L :2:2!:y :2̀y ͣ :22!""*"!6!6: *")*"*K: *: !6#6l: *)"ï !6l+6!6͔ :  G. - !"!\"!"*^#V" $!^q> !^] :^0O,h :^ AO,!_q:_OD :_OD !ap+q>`Mi !`\Mi !cp+q*bDMG!ep+q!d\+J<!hr+s+q*f&4 N,*gDM͵ DM̈́  ,*3&+) >>l!C9 < ,*3&+) ^#V*3M  ,!iq*# :iw*#"!͛o #*DMu{!"*!*"D*!s*D!s*D!s!6*!*"D*!s*D!s*D!s!6*M: *M: *M: O`iN928 "92;!j6:;!jU :j=O!< Hq!j40 *8M*9 !k6:;!kڇ :k=O!< N,!k4g  ,!lq*' :lw*#"!͛ '*DMT{*!*"!"!ns+q: ͪ :n!O> !>O:n2nO!mT!w& 8 !w:o2% & *M͍ !6!6:n!2oK :m!o>O!mC!pq*pM !rp+q*q}OY *q|OY *8M *9DMg *;M !s6:;!sھ :s=O!< NY !s4ž !t6:;!t :t=O!< N: !t4 : 2u: :* *uMi  ,*3&+) N#F+q#p!C6:? *uMY !vq "w:R:ҕ *vM*w *3&+) N#F+q#p*3&+) >>l2C:Ҵ *vM *wDMg !yq:y/:yH >!y# :y::::y8*;< -*:;2:@:<!C6*y&>) N#FG>!ykb :y/:yH҅V :y ¦:823*3&+) *9s#r:y!"+"-"/"1!36<::y<@ Gb :!:y<b :I:y/ *yM :y#~ >!y/͐ :yI:I 7:[:y[Ϳ o >á2zO>Ҏ*zM@:zá2z*zM͵:z,=>)-,),>,=*#"!|p+q*{~**{ >*{#"{>ʹ*~>~,H !6)!\""!o)ͣ !6!6ʹͼi**& w:<2cͣ ʹ7*~-w!6*~)…!6:ғͣ !6*"*~)*:º!6***̈́:*:!6!6lͼͣ Þ!6*~>ʤ*#"}!6*:3ͣ *~=X!6*#"}:X!"}**Ҁ* *}s#r*>wÑ**}̈́ͼҡͣ ʹ*~]*~D!6*~I!6*~M!6*~P!6ͣ ʹè!q!6!6*"ʹ!""!o8ͣ >͍J!"ͼҍ*~(c͆Ç*~_[],()!q: > :a/>z!/H:_2:!p+q*^#V"*##^#V"!6 !6+6:W: Q!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`:$*DM͐O>!>͍ ͣ !9*DM͠O>9ͣ *"*#"`!r+s+p+q+p+q***DMͮ*!r+s+p+q+p+q***DMͮ!p+q*DMp!6 > !*&*6!4²*DMͰͣ !p+q * 6 * 6*DM̀*͍!p+q*DM+ͣ !q*& , ,!p+q*  !p+q*!p+q*!p+q*! p+q*! p+q* ! p+q* !p+q`*!p+q*_{ozg_ogDM!>))덑o|g = DM!>))4 =,_{ozg~ D^#V) N~ U^#V|g}o `_{ozgO{ozgi`N#Fogo&og_{_z#WLIB 1.1 $REL $$$IRL $$$INDEX ERROR$NO MODULE: $SYNTAX ERROR$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(5ABORTED$DISK READ ERROR$DISK WRITE ERROR$CANNOT CLOSE$DIRECTORY FULL$NO FILE: $1I"CP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH1512826543218/82Invalid Filename$DIRECTORY FULL$DISK FULL$Creating Password$File not found$File not available$  ,.;=:<>_[]*? ERROR - $Password ? $Cannot Edit Wildcard Filename$Enter Output file: $FILE IS READ/ONLY$NEW FILE$-(Y/N)?$Insufficient memory$Enter Input file: $Output File Exists, Erase It$ BREAK "$" AT $END OF LINE$1I"1I"̈́""%*"%}0!#6%!"I" ͫ!+!#s͠!#s#r!I"!^ ͵ #I"!++s#r!#ͧ!+s#r!"#*#ͺ!"L#*I"% 6*I"+"K"ͫ!"M":] sr ͡ !#6\Mڀs:#Ҷ\S:h2y#!h6*"%|¶12!%¶!!%6!#6!+#:\:t#/H+#͍͋!%6 !"%*K""%!#6à1I"! %6#@1I"! %6?@1I"! %6>@1I"! %6F!"$%@! %6F!"$%1I"!w#6 * %M͟  :% :% H| Ã*%M͟ >$%!ʝ*$%DM !"$% 1I"!{#6! %6!z#6͂ ! %6E: $2%E͑  sð H͑  !s#6#~:+#2%:\2+#:%2\#+#3\+#!t#6ð :%I`!#: $: %H2z#i!#6!"%}2%*%+% ~ fiW?:%<:%:%H:%H:%­ ͋:% :#!# :%^> :#2#O> w:#!#?!w#6!#6!w#6:#2#!#&:#2#:#2#:#!#< ,V*%+% ~ P !%6:%ƒ> *%% ~2%O͟ !%6:% *%+% ~ HҬ ͟ - *%Mo ^w:%@Ow:% :z#/H- : % :% !#4 :% :#O>!#w-:% :% /!%6  w4!%6!#6pi:%O- !#6:~#!z#] ð O͸ u\Kð :%RRP"m2 %Ғ!v#6:v#: %ڬ P"r"!\"6!p"6#6P"!v#6Y2%-!v#6P"Kð Q͸ +#ͺ:t#/!s# #+#3+#ͺsð :%-&͂ !%6:%#7ͻ͂ t!T!:%:Q!%6L=!t:%:t͂ !=!:%t*%#"%Ҁ!%6:%B¡!%>w!"%*K""%ͅð :%C²Ͳͅð :%DͲ͋ð :%K͋ð :%L͑ð :%P !%6w  ͎ð :%T ð :%U6 :%2}#ð :%V… f %%!DMt/͟ *K"DMt  :%2~#} !#6 !#6ð :% ± :%: %HҮ ͑ð :%Hҭ :%A !%6*%"%*K""%ͅ   !%6ͅê :%F M \ ê :%J¤ Mx: %2 %xҡ \: %=2%:%<2%! %f *%&$ ~2%-E *%"%* %M* %~ ! %: %%!"%!%6ͅ*%DM͘4 ê :%M: %H !%6>%! L:%<2%O!%$ Hqy :%2 %!%6*%#s#rê :%Nf Mc * %` ͭ/ @̀ !%6!"%͇ͅ!%6K"%!]   ê :%S¶ Mxҳ \: %2%%!DM͘! %:%Ұ *%&$ ~2%!%4-Ï t ê :%W ê :%Xu P"m2 %!#6 !u#6P"^:#  r `!u# ͓B !u#6 r"P"!"6#6!~"6!"6r":#B 5*%"%%%!o *%% N*%"%K >ê :%ZŸ ҏ ;  @Ҝ Ï ê :%ʪ ð ív!&%q:w# *&%&!'%q:'% !#4:'%  !#6*'%M :#    !#55!(%q:(% :#O>H2)%yQ !(%6 !*%6:)%!*%n *(%M !*%4V !+%q:+% ~ >:+% :+% H:+% H!,%q*,%Mo ڻ ^+ :,%@2,%*,%M+  ͟  ͟ !.%p+q*-% !0%p+q */%DM !2%p+q *1%DM !4%p+q*3% !6%p+q*5%:! %6O!"$%@!8%p+q*7%!:%p+q*9%2#!<%p+q*;%2#!>%p+q*=%!@%p+q*?%!B%p+q*A%!#6# >>!D%p+q*C%!F%p+q*E%!K%r+s+p+q+q:G%=2G%+*H%*J% w*H%#"H%*J%#"J%!M%p+q###*L%gR !O%p+q*N%f!P%q*P%&-:u#Ҁ#^͵  !R%p+q*Q%DM s+#K͍:#ҹ#!T%p+qͬ*S%DM^!V%p+q*U%DMͺͬ*U%DM͑!X%p+q*W%DMͺͬ*W%2#!\%s+q+p+q:\%=2\%2*Y%:[%w*Y%#"Y%!`%r+s+p+q *]%*_%DM"͹!a%6:#!a%ڵ*N#*#DM\q2#ʤ>!#ґ͟*N#*#6:#2a%î*N#"N#!a%4`͹!"N#:s#>#N#!X*N#*#~2b%*N##"N#:b%:t#):s#)!R#+##R#3R#ͺ:#)>>!P#ͧ!!d%s{@*P#!e%s!"P#!c%6:d%!c%*P#*L#DM+#́ʵ]>P#!ʦ*P#:e%ͷ!*P#*L#DM*L#*P#:e%ͷ!"P#$*P#"P#!c%4S!"P#!f%q#P#!,*P#*L#:f%w*P##"P#!g%q:#,Q:~"2":"2"r"́'$$!#6*#&" :g%w!#4:#2h%>!h%Y!h%4Dr"K!i%6 :i%=2i%ʐ*i%&r" *i%&P" ʍ>e>:"2~"r":"2"Qr"q:"2"!#6>!#*#&" ~!#4¾*P#},:s#\K+#K:#͟:x#+:5#25#ͬ+#:t#G\]#l3\+#]#;#3+#!k%p+q*j%*j%DM!l%q: %ʄ*l%M͟ !m%q:m%a/>z!m%/H!n%q*n%M͌ҹ:n%_:n%  # !o%6>!o%I Oͤ2p% *o%&# :p%w:p% I:p%:p%7:o%$:o%=2o%O!# 6 :p%Bs!o%4ͭ2p%!q%q:q%a!q%6:|#p*q%Mͤ:q%!s%p+q!'"v%!u%6>v%!*r%*v%~!{2t%*r%̀!"r%PY! ~!"v%:t%!u%!u%6:t%0O͟  ͟ Å!y%p+q:~#*x%DMt:͟  ͟ :z# ͟ *͟ *!$DM: %&*%& ~I:%<2%O! ~> >! %ҡͭ_! %:%ڍ>%!ʈ*%+"%>ͷ!ˆ!%6:%<2%=O!%$ NP:z#Ұ; OP:{#!{#6:#!~#K"%!*͟ ͡! $6 ͟ !#6!#: $2{#* $&# 6 : $<2 $=O!# NP:#B*Oͤ2%LLOͤ2%!{%p+q!~%6! %6!#6.:% ʏ:%ʏ *z%*z%#  :% ž.Ð͹y!|%6͹>!|%ҽÓ͡.ê:%::|%Ó*z%#~A<*z%wO>Ó*z%#6 .:%.)!|%6!#6.͹)> !|% Ó͡. :%;v*z% !|%6.͹d>!|%[Ó͡.H*z%DM#Þ>!}%҅Ó:~%ڏÓ:~% ! %6>:|%<2|%O*z% :%w!~%6!}%6>!}%*}%& :%> !}%  >!}%4¾>:#' ͡! $6!{#6 +#M9!t#6:,# 6,#]E+#\#4#:q"wRP"qr>!q"6:q"<2q"=O! NP!h6!j6!|6:#ҩcͬ\;"#:#c*#}|Hͽ ͬ\;"#*#}|H͍*#}2#:t#C:e&;͍C:fC:d>!#6C!x#6:#f:t#X͍!s#6M #+#3!7#6+#:#…͟:y#ʞ:y#27#ͬ+#,!7#6!K#6*#"N#!"P#!"!$!"%>%!!"%*%+"%>>!"#$:%*%#"%*%"%!"%+"%$*%"%*K""%!"%!%6:%Ҭ%%!2%*%v!"%% ~ He*%"%0*%+"%>ͷ!2%:%ڕ!%6%%!+s#ré*#$+"#$:%ҩ*%"%):%*%"%*%+"%*%#"%*%#"%*!$#"!$*!$+"!$*%#"%*%#"%*%+"%% ~ *%+"%!%q:%Y%%!V:%S*%% ~2% E*%% :%wÄ%%!҄:%ҁ*%% *% wYͅ!%p+q%%!ʱÞ:%*%"%%%!!"%%%!"%*%"%%I"!%!*K""%*%*%"%%%! OQ2%3*%% :%w:% M!%q:}#d*%MP:%K"%!x*%% ~2%O:% –hͻ%K"!M"!ڼÿhÝ!%6!"%*%"%͚ͅh%%!!%6ͻ:s#)2%)*%M%%!=*%% :%w:% VL2%:% :z#/HH/Wҥ:% ”!%6 ͦ!%6 :%Ÿͦx* %&$ :%w: %<2 %d!%s+q*%"%!%6:%/%K"!H8*%#"%"%:%2%*%&$ *%% !%:%2%/H5!%4*%#"%:%I*%+"%ͅ:%! %6x: %2 %* %l!%p+q*%DMM2%: %ڍ! %6O@ *% ~ :#/Hҷ *%#*%#~ *%##:%*#$*!$DM!z#6:%!"#$*%"%*%"%*%+% ~2% %:#" ,*#$#"#$*%"%%%!v:% Z*#$#"#$ͭZ*%% ~2%O͟ *%"%2*!%&"%*%"%*%"%̀w͑:%2%!%6w:%2%K"%!>%!H͇!%6>!%ͭ@>!!%4!%6!"%ͻ, M"%!& )  !%6 -!%6 -:#>%!H] @!|#6*%M͌2%*%MP2%:%/!}#+w!|#6L2%^ !%q!%:%:#H: %H!%q*%M͑  *%M V ; Oͤ2% :%N à:%Y > >:%02O"O> /!"%!))덑o|gҗ! =…!^#V) ¡!^#V|g}o «!_{ozgi`N#Fogo&og H !=! LIBX$$$$$$$LIBX$$$$$$$LIB$$$BAKҊ ҏ>.Ï_ Ҧ0Ï7Ï͜Ü\2|::Iͺ>2 :2f>2>û>!6 #=!~a1{1 w##:Ƃ2*6 2fl:<2!G\:>2 *|ͫ}*ͫ>:Ï:> ͏> Ï> Ï:_:<2>2ͺ >Ï*}o|*!""ͮͷ͇*"͛~ͫ#*}#"%"*̀*}K|K*ͺ-m121=2#\:}mͺ2>o:  /\ͺ 1gn~ͻ͙D.:ܰg+":>2 CP/M 3 DUMP - Version 3.0$ ERROR: File Not Found $ Enter Password: $ Password Error$ ERROR: No Records Exist$ Press RETURN to continue $,4!y~=W!x# ~#bxE {8~#o}oA'.`28!Ip+q*HT!J6J T ` T!p+q*T> >/Ҥ×!p+q*DM͛:̀ ̀:2:!!K:*&L Ǹ!4!K6 ͐uëYALPSID'TCELLOC$LAITINI!%cCOPYRIGHT (C) 1977 DIGITAL RESEARCH {{ { {zb{b{*9 {_zW}l&))o> \> \\ß*"!" ͟#͟Prںºx"x#"̀ں͇"1!6# y͟!h͟$h͟'h*̀`*̀`*1̀I ?! ^#Vr+sz`>>!@^#V#̀{ k͇#"/<͟h2**̀`i~#!~6͟*1Þ6͔h*1^#V#Þ͔{> \*/̀>*\ ERROR - FORM IS X,Y TYPE HISTOGRAM BOUNDS HISTOGRAM: ADDR RELATIVE FREQUENCY, LARGEST VALUE = .INITIAL = .COLLECT = .DISPLAY = .... !6 ` !6 ` !6 ` *&T` !6 ` !6 ` !60 ` *&T` !6* ` !6* ` !6* ` *& @AA I$DBD $I$BHA"DH!""@ves. A>SHOW B: Show access mode for drive B and amount of space left on drive B. A>SHOW B:[LABEL] Displays label information for drive B. A>SHOW [USERS] Displays the current user number and all the users on drive A and the corresponding number of files assigned to them. A>SHOW C:[DIR] Displays the number of free directory entries on drive C. A>SHOW [DRIVE] Displays the drive characteristics of drive A. ///1SID Syntax: SID {pgm-filespec} {,sym-filespec} Explanation: The SID symbolic debugger allows you to monitor and test programs developed for the 8080 microprocessor. SID supports real-time breakpoints, fully mo!y~=W!x# ~#bxE {8~#o}oA'.`28!Ip+q*HT!J6J T ` T!p+q*T> >/Ҥ×!p+q*DM͛:̀ ̀:2:!!K:*&L Ǹ!4!K6 ͐uÇYALPSID'TCELLOC$LAITINI!ÓCOPYRIGHT (C) 1977, DIGITAL RESEARCH g gzd{ *9 Wl> W> W*"!"^l!]kl$]xl']::>2l!6!"!~4*s,r,"!~Ol!F2y* "*xT-V-^yA!~4x]> WO" Q>2y*"  INITIAL = COLLECT = DISPLAY = "-A" IN EFFECT, ADDRESS BACKTRACE READY FOR SYMBOLIC BACKTRACE BACKTRACE:%B 2!4þ *%"%:/ ͩ!4¡ :$ !4!"%!q: O !{4>!O :!{O :2*'M!8 ^#V%!t ͫ *%B :w*%#"%` Ø Ø Ø Ø Ø ͩ` *M6` !6 ` !6 ` !6 ` *&T` !6 ` !6 ` !60 ` *& @@ I$B$!!D!$"H@* ͡. ;ͣW!E# ¡ # ¬# ·@ʴʥzʖ=ʐ=|zJz?4)z z according to a "User Number." User numbers range from 0 through 15. ///2Examples A>USER Enter User#:5 5A> The current user number is now 5 on drive A. A>USER 3 3A> This command changes the current User Number to 3. ///1XREF Syntax: XREF {d:} filename {$P} Explanation: XREF provides a cross-reference summary of variable usage in a program. XREF requires the .PRN and .SYM files produced by MAC or RMAC for input to the program. The SYM and PRN files must have the same filename as the filename in the XREF command tail. XREF outputs a file of type .XRF. Examples: A>XREF b:MYPROG A>XREF b:MYPROG $P   !!""##$$%%&&''