IMD 1.18: 30/01/2015 20:09:53 double density "Big Board II" cp/m 2.2 #cp2-677-0093 BOOT FROM THIS DISKETTE!  !$ _!$ O > >!K2>2!6E!> 2>2EAG>? >  .... Cal-Tex Computers 59K CP/M version 2.2 .... ......... release date 15-September-82.......... lØPSViVSÇ3ÊÏÔFYZÙs1ͦ{s1"{s1n{1`!"2<2 h!~8`,0F>,,!!0N#^#V#~ :8O!~ ""y2"  :<2!"K cannot boot8! y >Ӂہ >ȯZ(yӀہGۀ˿ہG(ۀC!qC`iz(n&#!y2<o! = "C#F`>2!":{2>:2O :2O! !*( (!!":G{! "!K:2&o)) 2~ `>͛ :(` :(E(:2*":2x*2~ `͛ 2y(+(:! *[R !~ "`S͍`~2:2*" 5E(͍:2*":2"!4~ݾ8 ( 6*#"G:=?<2:=ݦ &o))))))) [: >2:!*[R:!ɯ22:*͍!">2ͦ!6!"2ͦ!2::O((:M8 MOx!((*:O:($'(_:A2!uK{8K{ !K:UK:U>!K (ɯ2<~#O df f0O  0y_ BIOS error on A: not readywrt protectwrt faultnot foundbad crcoverrundrqbusy track sector ?*)))))|2x:=2y:(̀ͷ!PK:|(˿3:}3:~3:3>CCKƐ'@'O BIOS error on SASI status=... !/!!( f*!! x!/! f*!! x G(O !)/! f!|!! f>>> >+" v##!v+"(!~6:(>ӌ>ӌیO 2@\X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<Я2 ч!׶2:2a{_:׷ʖ:׷>Ľʖ:=2–!B!6#5ʖ:׷Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ "ҷ"͌#>?͌͘ =_.:;<> O҅o$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" #~?  xDIR ERA TYPESAVEREN USER]!yO#< Ty#O 3ӯ21y_͸2y2ͽ:з˜1͘A͌>>͌92^ :׷¥.!_~#fow]խ֎֥!v"!çREAD ERRORçNO FILE^:׷yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \ܷS܀*C :qn& ^#V>O^"*}:*)=":O:塵o"*C *C!ͮ~2~2ͦ:2ͮ:ܯO:w:w |g}o*密# ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw**{#zr+s{ozg**͕** ݾ,w͜͸Ͳ!!N#F$**O!~#:A۾#~$=2Ek͌::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | sߖ-|N-# S:2E!~Яw>T D^6k-äPYy 5*{zBK5 K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ կw4!Y~ʆ͌†t=ʆf ^ T կ2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yָpsp2mÆÆf ͧÆFILE EXISTS _: É: :׷ʉ=2)ͽÉ T!@k!}|q=qf^!~2>`~2ׯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: !׶ Â$$$ SUB *C ^OT *C~wD -'  -@ͦ~^*C Ox! N!Fwyxʋ>ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# #  w ~>2!E5T*C!"C"C!w# F! w͌xݯ2͢*C ~<wʃG:!ʎì 4~ʶ¬:<ʶ$ʶïZͻܯx>2>2ͻ:!Z2:E۷ẅ́͊Ͳ>2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:E۷͊:==»y==»*Ww#*"͸*:G#š"͸:!w4 iw:Z!E~=26ܯ2*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{]ؙإثر"C{2!"E9"1Aۯ22!ty)K!G_^#V*Cڐ~E ,&-AGMSۛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :۷E B 2>: ۷b# : ۷y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! ۾ Hù H H $O͐: 2 *CN# x: 2 p&x~+é7ٯ2 H! >w_: ! ۾5ͤNkͱ¦ͱxʊ#Nx: ۷! ۖ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!B۾w!>2*C~=2u:B2~2wE:A*C۶w>"!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6:ʑw:2E**E}DQ>2MOVCPM COMLPIP COM: SUBMIT COM XSUB COM ED COM4 ASM COM@DDT COM&LOAD COMSTAT COM)SYSGEN COMDUMP COMDUMP ASM! BIOS ASM`!"#$%&CBIOS ASME'()*+DEBLOCK ASMP,-./0DISKDEF LIB11234BB2FORMTCOM35678BB2CPM60COMD9:;<=CPM60 COMD>?@ABSS60EA HEXpCDEFGHISYSGEN8 COMJSERIAL COMKSERIOUT ASMKBIOS DOC"UVWMELDING DOC"XYZSS60E8 HEXz[\]^_`abSERIOUT $$$1y{0!B0}y|zx0y0{00 \X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<2 !2:2a{_:ʖ:>Ľʖ:=2–!B!6#5ʖ:Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ ""͌#>?͌͘ =_.:;<> Oo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" ,COPYRIGHT (C) DIGITAL RESEARCH, 1979 1] ʑ?ʑ! __0 r))) O @|r}r.g))å{u INVALID MEMORY SIZE$!$ʡ~/w/wʔ|g*"z|?¸>@G!>0w#w!4~:60+4~u!N#F! x, # =!v"z!w6!u#+w+wz >ZxG}o|g"|! :m c p!"xp ~#c*|!:m ʅ xä SYNCRONIZATION ERROR$ {°~#o}oҼüÅ*zZ# :m m! ~ #* DM! x  w#!N#F! D!_>0w#w1!`4~:60+4*"e@u READY FOR "SYSGEN" OR "SAVE 00 CPM00.COM"$*|  CONSTRUCTING 00k CP/M vers 2.2$#~?  xDIR ERA TYPESAVEREN USER]!yO#< Ty#O 321y_͸2y2ͽ:˜1͘A͌>>͌92^ :¥.!_~#fow]!v"!çREAD ERRORçNO FILE^: ! ~ 3#0 Wx x   G ~ # 3x~#B!Y~ɯ2:=!ý:=!:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ w4!Y~ʆ͌†t=ʆf ^ T 2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Ypsp2mÆÆf ͧÆFILE EXISTS _: É: :ʉ=2)ͽÉ T!@k!}|q>ͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q*=qf^!~2>`~22\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: ! Â$$$ SUB]"C {2!"E 9" 1A 22!ty)K!G_^#V*C   ~E , &-AGMS  !!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$ :B A2 ! ~6  O͐  : E  B 2 >: b # : y! 4 5~yy 5 6y Ґ ^H @Oy H  H : – ͬ   #H : !  H ù  H  H $O͐ : 2 *C N#  x : 2 p & x ~+é 7 2 H ! >w _ : ! 5ͤ N k ͱ ¦ ͱ xʊ #N x : ! 2 ͤ ! 5™ #wO ~x½  p H    y< < ʑ  : !qMD # 2*C !!~~#~O~G#n,-.‹! w! yG!x͢.:E <ʄ! q!pQ:E <. ʄ$.:E <ʄ i 6}2E x N! ~态O>G~G!~G} *C !r#r#r ^ ͥ_y#x#{s+p+q-*C  ͥ!!q#p#w*:B O Y G }*MD "ã:!B w!>2*C ~=2u:B 2~2wE:A *C w>" !""2B !" !r QQQâ~?ͦ ~?r Q *"C Q- Q͜QüQr Q$Q*):B  " *)*)Q;*"E :;:A  2A QÓQÜQ*C }/_|/*W}_*"}o|g":ʑ*C 6:ʑw:2E* *E }DQ>2óadjmrux}çìûpñns ns<nskLns{?      00k CP/M vers 2.2 1!21 ͻ}ͧͬ,I*lDMͻ:k:j<(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE) COPYRIGHT (C) 1979, DIGITAL RESEARCH, PIP VERS 1.5$$$ SUB =.:,<> _[]INPIRDPTRUR1UR2RDROUTLPTUL1PRNLSTPTPUP1UP2PUNTTYCRTUC1CONNULEOFDISK READ ERROR$DISK WRITE ERROR$VERIFY ERROR$NOT A CHARACTER SINK$READER STOPPING $NOT A CHARACTER SOURCE$ABORTED$BAD PARAMETER$INVALID USER NUMBER$RECORD TOO LONG$INVALID DIGIT$END OF FILE, CTL-Z?$CHECKSUM ERROR$CORRECT ERROR, TYPE RETURN OR CTL-Z$INVALID FORMAT$HEX$$$$NO DIRECTORY SPACE$NO FILE$COM$START NOT FOUND$QUIT NOT FOUND$CANNOT CLOSE DESTINATION FILE$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$$$$$$$NOT FOUND$COPYING -$REQUIRES CP/M 2.0 OR NEWER FOR OPERATION.$UNRECOGNIZED DESTINATION$CANNOT WRITE$INVALID PIP FORMAT$CANNOT READ$INVALID SEPARATOR$1 :2L> ̈́M9  2E > ! ^#V w#P :B O|^#V#"##"##"##"!O *!O *|!6ʝ 6>*w#w*w#w'û *! J * ""!N#F*^#V*~#foyx *{_zW+ * yx # *DM*s#r*s#ryOxG*0MD!!N: E G>O: \ S *C  :q n& ^#V> O^ "*}:*)= ":O:o"*C  *C !ͮ ~2~2ͦ :2ͮ : O:w:w |g}o *# ) :B O! yoxg*:B O }!N#F "*#*s#r^  ~!J  ! J *:o$*C ~i 6i w**{#z r+s{ozg**͕ **  , w͜ ͸ Ͳ ! !N#F$**O !~#:A #~$=2E k͌ Oͧ>~ͻ>2!"2!"28!"9:O R![?boot  ç!y2fyʒ>0G!h~ϰwi&))))3!jq!kq ~2koi`"l~Oj#!h~w !kw ?L:f>g yxzӉxӊY?28L28L8 >:fIyۉ:fV{ۋ:fcxۈ@$@B B HH II$@DI ABI$"$H$H@$$I! H*  $H@@A I $D!!$I"BI"I"@$BIIH$$$$BBI$@BI!"$$A DI$@ A$@$$@H! "!$$" @B$!!!DH$$"H @@BHH  !$$A"D@ "A" "BHA " !$ D B I $ !$$ H@BD D$221@:2!o6+6+6!6#6!6#6:G*o .!N6:^*M^!K6!6!6+6' :$::=2K  :ʤ\:ҷ\x'Ͳ:!\͢  :͈'! Ͳ:$: $͈Ͳ!N6' :!Cwͯ !6:^͢c!6{:/>!/H{ͯ :<2Š ::=HҮͯ !6:Ҿ:2 !6::/H͈;!6:> !/>HHͯ :^!w:<2:0}:@E}:!S!W6: z!]6:cm!c6:_z!_6l ::,: HHҰͯ : 2ó:E:1:2v!q!*8!*6: >ͦ>ͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q*: :/GyO>2!q*C " ͡  ʔ*J Ҕ^ :Oyʃ?|x | s-|N-# S:2E !~Яw > T   D ^ 6k -äPYy 5*{zBK5ڋ>*C w~#+w#w+ɯ2E 22 i  ^ *C :~w~͔͔# #  w ~>2!E 5T *C !"C  "C !w# F! w͌ x 2͢ *C  ~<wʃG:!ʎì 4~ʶ ¬:<ʶ$ ʶïZͻ   x >2>2ͻ :!Z2:E w ̈́ ͊ Ͳ  >2>2T *C G ͻ : w ̈́ n> 2;O ^ DM;}H> "*C  ::dd slO s#r:E ͊ :==»y==»*Ww# *" ͸ *:G#š" ͸ :!w4 i w: Z!E ~=26 HI DIA!$$$ $" "$D ! $"  $AB " BDD $$D!"DI$!$BH!"IB I$"D HD" " $"! @H !BI " I  $I$I$DI$ !I$@"$"$! $I$I(  BIB@!  ! !! D 15D715E0AB :100A700015E615EC15F515FE1504160A1611162CBB :100A80000E17161D1626162D16411647164D160E54 :100A9000155316040C040C9B1@$@B B HH II$@DI ABI$"$H$H@$$I! H*  $H@@A I $D!!$I"BI"I"@$BIIH$$$$BBI$@BI!"$$A DI$@ A$@$$@H! "!$$" @B$!!!DH$$"H @@BHH  !$$A"D@ "A" "BHA " !$ D B I $ !$$ H@BD D$!p+q* !q*& *M *M !p+q*!!p+q*"!p+q*$!6  !kp+q*j> >ڪ Þ !qp+q/ *pDM9: :M2r:N!r !:r *r& N!r4 !6:͔: :ͳ.!ws+p+q+p+q:w=2wN *s*u w*s#"s*u#"u' !"*M^7 !x6:!xھ **DM͆ 2yʭ :yʗ ͯ *"*6:2x÷ *"!x4d !"/ !j}=2| !"*KM^'_ !z6:|!z1 * "}*}DM͆ ' ͯ *"!z4 :e !"͆ !z6:|!z '? 2*H#"H!{6:{ր!Ң *{& :{4 2!{4m *":ڹ ͯ !z4I '2!"!q: !4>!S :S! :2*M! ^#V͎ * :w*#" = = = = = ͯ  *M !6q  !6q  !6q  *& !6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 : = F P [ f q  ÷:S:QHI:N<22: H@"2Í202O> c!6Í202O> ڍ*&O*& !sc*&P :w:·>!ұͯ :22:_!6=!6>'!E!4!p+q*0 !r+s+p+q*~$7*>*>H&>*#"*#"> 2:R͎:!6!6=2:ʙ!6:“H9Ž>!6-e!6ͻ2=2ʺ-é:>>"ͻ2:!!5ͻ2ͬ!\-:>>!p+q:,!6*DM9:<!6:z 2W!6D*&L :w:<2Ov*:>=20O> ڒ:0:AO>Ҥ::A }}Hͬ!wͻO`idͻV[2O>2:!X!6:!:=O!L NE!4 E E:/.*&L 6$L9k9.Xͯ *KM^020 :020:121'ͳ':²ͯ !G6!"!"7 *M^n/ :a/:H!6:ͯ !&6 copyright(c) 1977, digital research $Error On Line $SUBNo 'SUB' File Present$Disk Write Error$Command Buffer Overflow$Command Too Long$Parameter Error$Invalid Control Character$Directory Full$Cannot Close, Read/Only?$!9"!͇͊!p+q* ͊!p+q*͍2!p+q*͍2!p+q*͊!p+q*͍!p+q*͍!p+q*͍2!s+p+q+p+q:=2ʦ** w*#"*#"!p+q(+*DM*p*& 6:ep\:=ͧ!t6>!t%\= >!t6:t<2t=O! ~2u b:<2O>9b!60+~9b!60+4:uat:u_2u:uMʉSͧ!v6!"v!|6:|Ҁ!x6 2}:} Hk:} h:}$6 2}$*}M3:}02}O> ͧ3!z6ͭ:}"!}5́ͭ́3*yM"h:}^a a2}O>Vͧ^:}>*z& ~ !z4í!{q*v#"v͙dͧ*vv :{w:x<2xO>}|ͧ :2!q: " *M n :c4 *M n :2!c:Q !c:2: !:cw>!n !5 Y : { !6!q:!lwҙ  â :0O !q:O| :O| !6:]2l:o'2o:n'2n:m'2m*mMͣ *nMͣ *oMͣ :]:   *}2D" * * *&"!q:UY: Y:ҩ: ʩ:_2ʘ:€!6<:<2!ژ!6 >!]Ҥ; !6:Q::H: !6*M : !6!q:a/>z!/H:_2:!q:A/>Z!/H8: 2::=O>m:W!Q} Hmd>9>!6:2*M!E ^#V͎ڗO **~2*#"m2m͖ 2m!6m!6m!6 m2mͯ m!62m!62m!62m!62m'2:2:TҒ:2!6*ME:2::Ҳ:<22ý: 2:} >ͯ :i:2:d*M:[ 2*">!b!ͯ >!`0ͯ !q:E:24J!46*}a!44EJ *KM^'́:‚ͯ !36'n::0:f9OY#9.3'ͳ.:020' 'ͳ'7 6'!j>A+!s!"@͓1!"<**"͓n "Dn"":!Q2҂:X!Wғä:ڤ*MEÓ:ұ@@:O2Mc;!6#6>!)*&P ~"::H:H:H:H"!6!4:_jYO jM*"S*" 3@bl*M1͓!""7 *M^͆ \͔!":͎H*#"ͧÝ/ :>͛9ͯ .*#":_!' !'6!36' :1/!aE*#">z?C9IͲÁ.!6> !ڇ*&' ~2 ʀ: y.*M!4Q>!қ:=2á:2:Ҭ\>!ҿ:=2K:2K!:!:K\: \!p+q͈*-!6]:ͧz2~e:~2O! 6*~& 6$>!~_z*~& w!~5Bx:yͧ*v+"vv ~_{ozg001 $$$$ SUB ͊!p+q*͍2!p+q*͍2!p+q*͊!p+q*͍!p+q*͍!p+q*͍2!s+p+q+p+q:=2ʦ** w*#"*#"!p+q(+*DM*p*& 6:ep\:=ͧ!t6>!t%\= >!t6:t<2t=O! ~2u b:<2O>9b!60+~9b!60+4:uat:u_2u:uMʉSͧ!v6!"v!|6:|Ҁ!x6 2}:} Hk:} h:}$6 2}$*}M3:}02}O> ͧ3!z6ͭ:}"!}5́ͭ́3*yM"h:}^a a2}O>Vͧ^:}>*z& ~ !z4í!{q*v#"v͙dͧ*vv :{w:x<2xO>}|ͧ*M:>!(:=2%> >>!F!5+N! ~2!4<2T>>!b}*bMͭz:b2!b6:<2é>!`ҥ*`MͭҞ!`6!6> :é:(!q:!wO! ~2*& :w>!:!4!6>:N<2N!> *N& N2 !p+q!6!6+6 !6: S: M!6g8:N2M*M8p!6!6!6>!ڕ*&P 6!4z!6!6#6#6!6*M8:ھ:*͇g2ê::¿::,͡A<2O>*M8):[ͱ!N5!6ñ:5!6#6>!ڰ!6:<2O>/:!O!T *M͡H~K:¡!6[–ͱ!N5:2:2!4=:[¼ͱ4:!6:.2O8: :* ͇g:[ ͱ!N5!6:%:<2*6 * 6å!q!6> !d*&I :]>!4A>:<2O* :w:?†!6!q!6?!:ҠgÐ!q*&*~!6:22: :]Hں:A2O>: 2ͯ DM!  ::=H-\:N2O_og_{ozg^#V))) _{ozg^#V) d^#V|g}o n_{ozgO{ozgi`N#Fogo&og H ©=¨!j>A+!s!"@͓1!"<**"͓n "Dn"":!Q2҂:X!Wғä:ڤ*MEÓ:ұ@@:O2Mc;!6#6>!)*&P ~"::H:H:H:H"!6!4:_jYO jM*"S*" 3@bl*M1͓!""7 *M^͆ \͔!":͎H*#"ͧÝ/ :>͛9ͯ .*#":_!' !'6!36' :1/!aE*#">z?C9IͲÁ.!6> !ڇ*&' ~2 ʀ: y.*M!4Q>!қ:=2á:2:Ҭ\>!ҿ:=2K:2K!:!:K\: \!p+q͈*W Extended Submit Vers 2.0Xsub Already Present$Requires CP/M Version 2.0 or later$:y*###ƒ# yk   җ 4!~=ŐW!xʵ ~#èbx {~#o}où.xsubb!np+q*m2_!pp+q*o ]xsub*"-!/"*"+!""1 M*!"́!"* (xsub active)$|*y ʥ*"*7***x*́͋<͛ :%*=26͋!7^#6 #6 #6$ 8*7~O #w# !6:6=2% ͋*-"*$$$ SUBq:(=2(N *$*& w*$#"$*&#"&' !"N*M^7 !)6:!)ھ *N*DM͆ 2*ʭ :*ʗ ͯ *N"P*6:2)÷ *N"N!) $@BA$! A "!$""!!6e*!M͛ /$^L:!@OL:! 2͑e:b:! L:h<2hb:! b:hO>!hw:! pX:! …!!6  LÊ!!6ûô:!ʛ͑:! ҩ OҸû:!R†!6G>!!!6 :2.t -? >!!6!6s, !6:xB!6OU2!SB!G6:҃!6:G҃*G& ~2!:G<2G_ Qқ=e  b:!-®! 6:!#¿͇;J:!:!!6Lv:!:Jv: *#"͎! 6:!B)! >w!"&*o"(R :!C:eR :!DKeX :!K\ͷX :!Lj^ :!Pš͎҇! 6F×͢җ:Ç :!T¨F :!U¾: 2 :!V͎"$DMͩ/ *oDMͩ : 2 :! (::H%^bF : ͎H :!Ay! 6*""&*o"(R͎an͢na! 6R :!F”͢ґ Ä :!J $:2$͢ :=2:<2!*& ~2!ü*""I*M*o/!:"6:0O  ú!p+q:/(*DMͩ:  : I N* *DM:aO>!Һ x!: ڦ> ʡ* +" >¡! 6: <2 =O! N͒:  O͒: ! 6:h!o$O* ͸ ! 6 !h6!: 2 3* & 6 : <2 =O! N͒*dM  :sGsu n>!6:<2=O! N͒!">!"͎/Ҵ*+">>!": *#"*""*!".+",*$"**o".!",!36:3{.*22*,**"0M ~ H3*0"**+"*+">23:2/k!36,*+s#rx:3x*0"*: “**"&*"+"(á*$#"&**#"(*"#""*$#"$*"+""*$+"$*#"!4qM*"*$: *(y"$DM}|C#~ *#"*&DMyxC 1*+":4?w+"$""ͷR: —*$"("҈!"&Ô""&*""&$mڸ*o"(**$"($"O26͛*"M :6w͢:6 "&! 6R*I""ë :!M:H| ! 6>F ͛e: <2 O! Hqy d F : 2! 6*#s#r :!N ͢ *o/ Ҧ Ͷn! 6!"&R! 6o$ Î Ç :!S0 $͢- :2"+s#r!:* *& ~2!:<2 :!W> v :!X³ Z͎\ Ee ð :7/҃ E!76e ͕ :xƒ - ͷ*&"K(Kڰ *KM N͔*K"KҌ :!Z ͎  ͢ : :!  'v!gq:f *g&!lq:l $ !h4:l 1 !h6*lM :hB     !h55!mq:m :hO>H2ny} !m6 !o6:n!oښ *mM !o4‚ !pq:p ڪ >:p :p H:p H!qq*qM͛  ^W :q@2q*qMW   !sp+q*r !up+q *tDM !wp+q*v !zp+q*y2x!|p+q*{2x!~p+q*}2x!p+q*!p+q*!p+q*!p+q*2x!p+q*!6   >>! q* &!p+q*!7q:*7M͒:7o$+͛ͪ*$M ~28Om:8 I͇͢u$oqo͛rP! 6!"&*$"(R͎ҔM͢ҡÔ($ҵ! 6R͇vͶ2!*!Mm$"*"M :!w͢:! e2!:! : /HH/Q:! @!!6 R!!6 :!KR$*& :!w:<2dn!:s+q*$";!>6:>/;oH*;#"(";:92=*=& *(M !::=2>/H:=<2=*(#"(æÀ:>*(+"(R:>!6$:2*o/*!My:<2=O!s Hq**DMͷ! 6: e!"*""?k*&"?*?+M ~2A :hHҏ *&"?(?:A ½8*#" ҽ*?M ~2AO *?"?ҕ!"*"*"^: 2B! 6F:B2 o(>&H6͛9!C6>!Ca R>:C<2C?! 6!"͇͢Ґq"ڊ͛Íq!!6 !!6 !6*!Ma2D*!M͒2!:D/!+w!6e2!͢!Eq!E:!:H:H!Fq COPYRIGHT (C) 1979, DIGITAL RESEARCH DISK OR DIRECTORY FULL$FILE EXISTS, ERASE IT$NEW FILE$** FILE IS READ/ONLY **$"SYSTEM" FILE NOT ACCESSIBLE$BAK$$$BAK$$$-(Y/N)?$NO MEMORY$BREAK "$" AT $1mM"m +!8s~1m!f6 *M  *!M 1m! 6!6! 6: 2Ebͽ!e:d\::eH2 H҆ͽ:e2!:d2e:!2dû :!I¬!: :H2 ҮX:h2iҐ:!ʍ:!:!H:!H,!"! 6#~ F)ͷX:! X):i!h)9 e:!:h2jO>F L>!":i!jHҼ*"+M ~ ʼͲ!f6!h6!"! 6F!f6:h2k!iҠ:i2k:j2h:k!hҶ9 æ:h2j!!6:j2he:! >"Ͳ*"M ~2!O :! *+":7 e !p+q*DM  =? ) !p+q.*DMF -L *9"`!"b!h6!j6!|6.!=\ -x !e:dʥ *eM \R :xʥ @ *dM \, :x \͕ :x - V :e _ :f w : =e !e:d*eM =e : =e =͕ !]6:x>- !"!76!6!6!66*dM  *dM !6:8!*`*;DM \u 2xʻ>!xҨ- *`*;6:82*`"`:<2w!"`9`h*`*;~2*`#"`:*eM !b+!s{!f!6:!b*b*^DM =ͅ N- *b"b:<2)f!"b!q9bڀ*b*^:w*b#"b!q:6ڶZͅ ʱ- !66*6& :w:6<26!J6*b}:J<2Jm=? :x- : ;*dM .=\ -=ͨ ;: *eM =ͨ .M= -C!q:Y*M !q:a/>z!/H!q*MaҎ:_:!q:ҥ*My:!p+q!'"!6>**ͪ{2**ͪ"*! ͪ":!!*FM8 *FM   Oy2F :FY5>>:!02HO> /!";u*)))*) *H& "PҘ! 6+s#ré! 6"DM!>))덑o|g =±^#V) ^#V|g}o _{ozgi`N#Fogo&og_{_z#W H = LIBX$$$$$$$LIB$:2*o/*!My:<2=O!s Hq**DMͷ! 6: e!"*""?k*&"?*?+M ~2A :hHҏ *&"?(?:A ½8*#" ҽ*?M ~2AO *?"?ҕ!"*"*"^: 2B! 6F:B2 o(>&H6͛9!C6>!Ca R>:C<2C?! 6!"͇͢Ґq"ڊ͛Íq!!6 !!6 !6*!Ma2D*!M͒2!:D/!+w!6e2!͢!Eq!E:!:H:H!Fq@2 0 0:x0_<2! wI2 2> 2 >2ɯ22 !~@_6^4#: w~$w: 0 q: A: A͋q: a{_2  2 - !ɯ2I:  ;*:  ͭͷ ͭ͋>9q>9: '!2 >9 7:! 6 >2>2: 2 Qͭ:Ğ! :lj<͖<j<|<: OʊQ>ÖH >2 2 û: B­>ôD> ¸!52 !"!N#~#A07O! ~*!) " :  '<ͭ'<>V$>O$:Ğà\ÞØ`rÍÖ![w#w#b!"!F#v2[G*##~w*##~<*}q!~ڬ6![^![^#fk"͎͘!G#*####*^#Vû!^*"*!4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ {zA"*![N![ N#Fr+sq#p/>G=#w#w3#w#w!JSYMBOL TABLE OVERFLOW G*##~w*##~͎*_###s#r^#V`à 4 Wm ()*+,-/ABCDEHLMDBDIDSDWEIIFINORSPACIADCADDADIANAANDANICMACMCCMPCPIDAADADDCRDCXENDEQUHLTINRINXJMPLDALXIMODMOVMVINOPNOTORAORGORIOUTPOPPSWRALRARRETRLCRRCRSTSBBSBISETSHLSHRSTASTCSUBSUIXORXRAXRICALLENDMLDAXLHLDPCHLPUSHSHLDSPHLSTAXXCHGXTHLENDIFMACROTITLE  PF FP! ( 2/?'  v:P@< !  PP27 ( *"  NZZ NCC POPEP M x_BH!œ#¶ ¦{KÈCÈ<:JCR:  !6 s!#  ɯ<:O=_Z!F!V#fjQ̓E!^#Vo&)~#FxGyѯ<àn8!~ڢͅ6~44O! s#r!~ ڿ6ͅ^4!mw!wp!~ͅ!55N! N#fio&)^#fk1*" COPYRIGHT(C) 1978, DIGITAL RESEARCH á 4êü /L9ASMPRNHEX!)ͼ !ͼ :5͡ :6:6͡ :7͡ :\ ʻ 24!dͮ 25ͮ 27ͮ 26!8 ( ʃ !Y 1  :7ʞ !z 8  !"2D2X2#! 8 !ͼ z{* ! !"!8 w#  +6# *#"~!ͼ G:6QxJQS*!w#"! 1 !"!Y~~# …¡z!ͼ wʹ* ! w#" ! 8 !" ! zz_O4:  :6y:! G~#x=2> > ! >x6 #='G! ~ p( O*}O>4?:7w:#ĸ*"!͸* }w>ͪg( ʆ1 Y :7ʗ8 z !<ͼ CP/M ASSEMBLER - VER 2.0 NO SOURCE FILE PRESENT NO DIRECTORY SPACE SOURCE FILE NAME ERROR SOURCE FILE READ ERROR OUTPUT FILE WRITE ERROR CANNOT CLOSE FILES END OF ASSEMBLY G:7xʘ!#~ʄl͸Ä**!O {zʊ͸*"!!#^4!$wͯͯWƐ'@'ê>:ͪ!#^Ww*!{͚|͚}͚͚{!$~#͚͚> ͪ> ͪz'{ͅ>ɯo>g"k!m6ů{_zW5>)D*kOxGd !m?FDM!xGyOڂÃ)sn55)=â|g}o=î--#zg{ozg{ozg{oÓ:: ;,!ɯ22=2l!"]!~H5_!m~0:ą:  *":  :‰:̅ԅ!^#=ʅVq”*qͦ1& O:lµ̅>2ly:_!w~!s!m~ùy !~=w_!m~ ͅͰ>2lyPLnR>UX:l̅2l͓*>E2C!" """ :ʼ:*1 |R|ͦ0FIL: R  R* } *" :¿::¿üX!C^#fk[@ :Œ:=ʌG!ʆF#H vÛc*| EH ͺ,^1 ͦ *""1 EH DH ͺ,1 ͦ :  1:  " > 2 z8O!B N#N ¾SP.* |} !9":q!"28!"9:] !í 1)*)þ))>+><7"9.Yͯ * M^2U :2:2ͳ:_³ͯ !6! @!!BH @@ABH B! "BHI$$BI$BI $ HI D$HD$$ H B!$D$"$B$DA!ABI$H B$I $HI$H$! $I $I$$A !A@$I$"!$H$I$I "! $A$  HHAA"I @BB $A"$$$I$$H!!! BH" !I B  $$!BD! $!BI D@"!$I$$H"!I$I$I$UUU$$A$ x (#"!N#FW( *J>7Å*M|N+"M N:LHͅÅD Å >* *͓ b" . *"] !/~##ʁtZ*F#n!Is!^#V&&##&))::^#V#*^#V>+)x-8_:|: |Ë  |*" ͩ !6="1 :  1}1:n:>BʋSSͦSSxS 1:  1"" ͦ 1 |R >O U!" 1 1!|_!^#fk $8AP`ixH ñññ81Ľ y0îH ñGîG  ñH ñ(Ľ yîH ñîîĽ y0îîH ñG 1: :,; c*| } 8OĽ y0G G t :):,.>C :|: Jü;r :R: ʼʋ!ʼR!ʼʋ>SR{ozg!~4ʧͦ !6 ! **̈́**̈́\iͩ !w#H USE FACTOR !* "z{*"* "I !" :1 R O*UR X* G:xl :  *̩ : l x͖ *#"EH DH 0:~ ! ^4! w͆ Æ *! 6z͖ {͖ 4>R>V>D >P >L >N͓ !" >- Ͷ Aګ ҫ _!7^#V~  \p Z z ů2[\͓͢ ҫ ͐ =« f " ͓ ҫ ͐ ʻf " =ʻf "=« ý> 2͐ f "]=f =« *]}o"_  *]"a. ~ #E }"]*a 6 *]}#|#*]E ͐ « f f f {zA|« W}d ͐ f f f DMʡڏ"=ʡͲ=ʡYPͲ1**!O~4#~#F#x~#s#r#w>͐ « f f  . ᯕo>g. 2|2\  !]w# ʫ .&  0 6 #& .K !e K w# ʫ : U 6 #K 6AW w#] !e~H#~E#~X*}|́ "!́ ͐ !ʬ =« f kʫ j \͢F w# ͋ t ʫ : W& _& & O { `i"F & & w# & ͋ « t Y t Y GтWx ͢!o ~Z #N  *. *.  NEXT PC͐ =« f  . ~ Ͷ ʻ .͓ =« f |« }w#Ä >2L͐ ! =« f }ʫ +"MD Å D  !  #=COPYRIGHT (C) 1980, DIGITAL RESEARCH DDT VERS 2.2$10 !~=W!xe ~#Xbxʇ {z~#o}o҃i.2_!fp+q*e2_2_!hp+q*g!jp+q*i!lp+q*k!np+q*m2_!pp+q*oÃO$*sy͏ , $  ͌ 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#  ë «   Ͷ ͐ =« f xY |« }ҫ gA>S Ag}S S i |« }!w s#r:[ʔ _!~ʦ ![4ç \͢¦ 2[ 7 >?  e͢!g"c> _͢a_!f~> 5*c~#"c 0 7   > >  ͢| } @ >. *_}o| , 0 ë ^#V#!Y ))))o P q s#r#!V4 !V6# ,® >2Vñ m ͅ m ͅ m ͅ « Vʫ ! XN!~  ! _^! ^#V~ x+ >= = !~  . !   #x f L L ͓ͅ ҆ *" !6ï +"_*~ #E گ ʫ ^#V. ï ~ CZMEIABDHSP!"M"+"!91*~!O~6=G#^#V#~x (#"!N#FW( *J>7Å*M|N+"M N:LHͅÅD Å >* *͓ b" . *"] !/~##ʁtZ*F#n!Is!^#V&&##&))::^#V#*^#V>+)x-8_@ COPYRIGHT (C) 1978, DIGITAL RESEARCH ERROR: $, LOAD ADDRESS $DISK READ$INVERTED LOAD ADDRESS$DISK WRITE$LOAD ADDRESS $ERROR ADDRESS $BYTES READ:$INVALID HEX DIGIT$CHECK SUM ERROR $FIRST ADDRESS $LAST ADDRESS $BYTES READ $RECORDS WRITTEN $HEXCANNOT OPEN SOURCE$COMNO MORE DIRECTORY SPACE$CANNOT CLOSE FILE$*!9"!e !" !" \!""͊: ƒde"\\\͊: ²d\͝: )d;! q* &f  ! q> ! : A O: 0O! q: O: O! p+q* |O* }O! p+q*  f! p+q* DMB! p+q)R* DMB1B* DM+;! p+q* i2 ! p+q* i2 ! p+q* i2 i2 !" p+q*! f!$ p+q*# i!& p+q*% i!( p+q*' i2 !* p+q*) f!/ s+p+q+p+q:/ =2/ X*+ *- w*+ #"+ *- #"- 1* #" ͖r*   ~!" ! ͸×* " x20 º*   DM":0 Ad*   6!" Ç!" : !"6 "8 ": }2< !"4 "= ! L!*p+q*)O2'!,p+q*+O2'O2'O!.p+q*-LRRLR\LR" O!/q*/& L!1p+q*0#L~*##N!ͽ͞"T!Vq*VMͳ!Xp+q!W* >Wr#MͲ!_p+q!`6>!`6*`&*^*`&Y />!`4 >*]& ~ O!]49!a6:a*]& ~2bO>z*bM >!b/~,H~:H~*H~.H~>H~<H~=H*]& 6!]4T!]4!cq*a&Y :cw!a4!gr+s+p+q!h6>fr*d*f!is*d́"dPY! "f>!h#~Haͫo!h6:i0O͐!mr+s+p+q*lTZs#r*lڶ*l+s#r*jN#F+q#pÌ!nq!"o"q}2uo&"s* s:n*sDM2u:uqos*s"s*o͊O !v6>!vQ*v&w 6`i+46)A*:'ʓ:'O!) ~2vʍ:vO!w 6,]!v6>!v*v&w ~һ*vM !v4˜8AO͐:͐ͱ*##N!ͽ"* N#F*͠")*)) *)) N#Fq#p*)) *)s#r*)#")!)6 J:)!)J!)6 :)<2)*)")҈q:tw͠ͱ!"))ҍ*)) ^#V")]͠.*)DM\ -°!\6:\ͣ:ͱ*}DM'ͫ*)%) N#F'ͫ*)!) N#F'k͐ͫ*)) N#FͫR͐/͐ *) ~IO͐NW͐ͫ8AO͐:͐ *) ~2)t(͐:)҃)͐*)#")Ã& \!"))\Ұ*)")]͠*)M! ^#V *) >*) w *) >*) w *) >*) w *) >*) w.*)DM\ -+!\6uͱ:)O! DMͱ*)#")Ù*))))))"):m w>.Yn -:YS:Z Hҧ!6> 2)½>!)6> !)*)&*)>2) :) .͐*)M͐:)<2)99:Y=/9&ͩ c,Hͩ 9 EHͺ i`N#Fog_og_ogDM!>))덑o|gҘ =†DM!>))ҭ =¥~ ³^#V) ½^#V|g}o _{ozgi`N#Fogo&og_{_z#W6Y: !2 6=21 á:1 : r+s#r==_HL"4 " >6 ͪS* "6 =23 :1 =21 v=O* #" Y8  ͝҉* +"8 .!2 ʞR̀* "4 4 = ͝* #" çR*6 DM+R*8 DM+R*: DM+R*< M!? q=  ͝Kd*= ! ͸p!@ 6>!@ X*= }O!< *@ & w*= #"= !@ 4)!< 4\mad* }O!< :? wlR*4 DM+{R* DM+R 4 ͝*4 }¿= 4 ͝< N*4 #"4  å;*4 DM+: Y2A 0O> :A 0:A AO>&R̀:A A H.2B !2 w:B !D s+q*C &͍:D _og_{ozg^#V) _{ozgi`N#Fogo&og_{_z#W( p+q*' i2 !* p+q*) f!/ s+p+q+p+q:/ =2/ X*+ *- w*+ #"+ *- #"- 1* #" ͖r*   ~!" ! ͸×* " x20 º*   DM":0 Ad*   6!" Ç!" : !"6 "8 ": }2< !"4 "= ! >!H% - *DM ͱͷDM  ͱ* N#F 9ͱ * ^#V))DM Tͱ* ~ *} *M!+s#r#4 !s+p+q!6!66:!ڄ !6!6>!r *&**&Y i !6!4+4A :} :!4- >!699 2¨ :!4: :2!6+6>! :O!9 DMi ͱ:!O!Y DMi :2:2͠!4 F :® )!6>!ګ ͠:O!9 DMi 8ͱ!6> !ڤ Å :2k ä  ͐:!O!Y DMi w !4C F :¿ >F : F :=229:Y= ;>9*&Y DM =2 I>!6:=28 :2:2 :!!29:Y T >:Y,e \>Ì !p+q*~:ʉ *N͐*#"o :͐!p+q!'"!6> **{2*́"PY! ">!+~H !6:0O͐à k͐"))ҍ*)) ^#V")]͠.*)DM\ -°!\6:\ͣ:ͱ*}DM'ͫ*)%) N#F'ͫ*)!) N#F'k͐ͫ*)) N#FͫR͐/͐ *) ~IO͐NW͐ͫ8AO͐:͐ *) ~2)t(͐:)҃)͐*)#")Ã& \!"))\Ұ*)")]͠*)M! ^#V *) >*) w *) >*) w *) >*) w *) >*) w.*)DM\ -+!\6uͱ:)O! DMͱ*)#")Ù*))))))"):m w>.Yn -:YS:Z Hҧ!6> 2)½>!)6> !)*)&*)>2) :) .͐*)M͐:)<2)99:Y=/9&ͩ c,Hͩ 9 EHͺ i`N#Fog_og_ogDM!>))덑o|gҘ =†DM!>))ҭ =¥~ ³^#V) ½^#V|g}o _{ozgi`N#Fogo&og_{_z#W3 Copyright (c) 1979, Digital Research????????????CON:RDR:PUN:LST:DEV:VAL:USR:DSK:TTY:CRT:BAT:UC1:TTY:PTR:UR1:UR2:TTY:PTP:UP1:UP2:TTY:CRT:LPT:UL1:R/OR/WSYSDIRR/O R/W SYS DIR ** Aborted **Active User :Active Files: Drive Characteristics65536: 128 Byte Record CapacityKilobyte Drive Capacity32 Byte Directory EntriesChecked Directory EntriesRecords/ ExtentRecords/ BlockSectors/ TrackReserved Tracks is Temp R/O Disk: d:=R/OSet Indicator: d:filename.typ $R/O $R/W $SYS $DIRDisk Status : DSK: d:DSK:User Status : USR:Iobyte Assign: =Bad DelimiterInvalid AssignmentBad Delimiter: Bytes Remaining On R/, Space: Invalid File Indicator** Too Many Files **File Not Found Size Recs Bytes Ext Acc65536 set to R/O Invalid Disk AssignmentWrong CP/M Version (Requires 2.0)!9"2!T OË!]6:\:] Hr3 Ë:\ʀË͇ /ҋͺ *2!"q*"&L ͐ ͐ ͐!$p+q*#~*#N͐*##"#÷!&p+q͠*%DMͱ O O!(q*(&͠Q" 8AO͐jͱͷDM͏ m  Z"l"!6>ʥ *}҆ *M ͱ*}x O͐} W͐ͱ !+s#r!+s#r#4D ͠:\ʹ :\=Oͳͩ !6!)6l :) :)=2) :] & !"}2\!h6?!j6?\:'C:'ƀo&")!)6!"):)/)HҘ]!)6> !)ڎ*)&*)*)&*) y!)6 Ä:) 2):)<2)M*)#")/:)ҩ*)+")`*")#"]!*)!/H!")!"]*)) *)s#r!)6> !).*)&*)*)&*) w:)<2)*)) >w#6*)) w#6*)!) w#6*)%) w#6*)) N#F*)) q#p*)%) *) ~e *) * ~o&͞ *)%) q#p!)6* >!)6!)6>!)=:)!)w=*)&*)~2):)*)& *):)2):):*)!) *)) s, >X\:)“>!d!")>!)d!")!")*++!)a*)) ^#V")]*)")*)) ^#V")]!)6> !)T*)&*)~2)*)&*)~2)O;*)) ^#V" xCOPYRIGHT (C) 1978, DIGITAL RESEARCH  o&)))))))a{__> ̓> ̓͊~̓#ÚO****!*$*'! ">2!4:(wNͯ>2:)!4f!^!*FNͷyj*DMͿ2: K!͚u c͊<2:\_/:)j*"1!u͚:] \<œ!x͕c2|\ ¢! DMͿ\õ!͕c!͕u AnA2Aͦ͊!͚u c͊2!?͚!͕u cA7nA2Aͦ!͕u c͊!6!?͚>ͦ͊!Q͕SYSGEN VER 2.0SOURCE DRIVE NAME (OR RETURN TO SKIP)SOURCE ON , THEN TYPE RETURNDESTINATION DRIVE NAME (OR RETURN TO REBOOT)DESTINATION ON , THEN TYPE RETURNPERMANENT ERROR, TYPE RETURN TO IGNOREFUNCTION COMPLETEINVALID DRIVE NAME (USE A, B, C, OR D)NO SOURCE FILE ON DISKSOURCE FILE INCOMPLETETHAT A JMP TO 0000H REBOOTS) CALL CRLF LHLD OLDSP SPHL ; STACK POINTER CONTAINS CCP'S STACK LOCATION RET ;TO THE CCP ; ; ; SUBROUTINES ; BREAK: ;CHECK BREAK KEY (ACTUALLY ANY KEY WILL DO) PUSH H! PUSH 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 ; FILE DUMP PROGRAM, READS AN INPUT FILE AND PRINTS IN HEX ; ; COPYRIGHT (C) 1975, 1976, 1977, 1978 ; DIGITAL RESEARCH ; BOX 579, PACIFIC GROVE ; CALIFORNIA, 93950 ; 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 AR ; 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 1.4$' 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 ;!9"1W͜Q>2!͢QG}DrYQ|͏}͏#> ex͏#r* _> e> e ҉0Ë7e}} :³ʳ7_<2!~ɯ2|\\FILE DUMP VERSION 1.4$ NO INPUT FILE PRESENT ON DISK$!Y , <    *$A!6 # T!w $r# *`: 0 *A*! ~ ʰxkb))))_y‘BK{ͅ*!66!"80*{#z+++ #EA (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, RETURN TO CCP ; (NOTE   ; STACK AREA DS 64 ;RESERVE 32 LEVEL STACK STKTOP: ; END ARRY 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 1.4$' 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 ; for mds) ; const console status ; reg-a = 00 if no character ready ; reg-a = ff if character ready ; conin console character in (result in reg-a) ; conout console character out (char in reg-c) ; list list out (char in reg-c) ; punch punch out (char in reg-c) ; reader paper tape reader in (result to reg-a) ; home move to track 00 ; ; (the following calls set-up the io parameter block for the ; mds, which is used to perform subsequent reads and writes) ; seldsk select disk given by reg-c (0,1,2...) ; settrk set track address (0,...76) for subsequent read/write ; setsec set sector address (1,...,26) for subsequent read/write ; setdma set subsequent dma address (initially 80h) ; ; (read and write assume previous calls to set up the io parameters) ; read read track/sector to preset dma address ; write write track/sector from preset dma address ; ; jump vector for indiviual routines jmp boot wboote: jmp wboot jmp const jmp conin jmp conout jmp list jmp punch jmp reader jmp sp,buff+80h lxi h,signon call prmsg ;print message xra a ;clear accumulator sta cdisk ;set initially to disk a jmp gocpm ;go to cp/m ; ; wboot:; loader on track 0, sector 1, which will be skipped for warm ; read cp/m from disk - assuming there is a 128 byte cold start ; start. ; lxi sp,buff ;using dma - thus 80 thru ff available for stack ; mvi c,retry ;max retries push b wboot0: ;enter here on error retries lxi b,cpmb ;set dma address to start of disk system call setdma mvi c,0 ;boot from drive 0 call seldsk mvi c,0 call settrk ;start with track 0 mvi c,2 ;start reading sector 2 call setsec ; ; read sectors, count nsects to zero pop b ;10-error count mvi b,nsects rdsec: ;read next sector push b ;save sector count call read jnz booterr ;retry if errors occur lhld iod ;increment dma address lxi d,128 ;sector size dad d ;incremented dma address in hl mov b,h mov c,l ;ready for call to set dma call setdma lda ios ;sector number just read cpi 2home jmp seldsk jmp settrk jmp setsec jmp setdma jmp read jmp write jmp listst ;list status jmp sectran ; maclib diskdef ;load the disk definition library disks 4 ;four disks diskdef 0,1,26,6,1024,243,64,64,offset diskdef 1,0 diskdef 2,0 diskdef 3,0 ; endef occurs at end of assembly ; ; end of controller - independent code, the remaining subroutines ; are tailored to the particular operating environment, and must ; be altered for any system which differs from the intel mds. ; ; the following code assumes the mds monitor exists at 0f800h ; and uses the i/o subroutines within the monitor ; ; we also assume the mds system has four disk drives revrt equ 0fdh ;interrupt revert port intc equ 0fch ;interrupt mask port icon equ 0f3h ;interrupt control port inte equ 0111$1110b ;enable rst 0(warm boot), rst 7 (monitor) ; ; mds monitor equates mon80 equ 0f800h ;mds monitor rmon80 equ 0ff0fh ;restart mon80 (boot error) ci equ 0f803h ;console character to reg-a ri equ 0f8066 ;read last sector? jc rd1 ; must be sector 26, zero and go to next track lda iot ;get track to register a inr a mov c,a ;ready for call call settrk xra a ;clear sector number rd1: inr a ;to next sector mov c,a ;ready for call call setsec pop b ;recall sector count dcr b ;done? jnz rdsec ; ; done with the load, reset default buffer address gocpm: ;(enter here from cold start boot) ; enable rst0 and rst7 di mvi a,12h ;initialize command out revrt xra a out intc ;cleared mvi a,inte ;rst0 and rst7 bits on out intc xra a out icon ;interrupt control ; ; set default buffer address to 80h lxi b,buff call setdma ; ; reset monitor entry points mvi a,jmp sta 0 lxi h,wboote shld 1 ;jmp wboot at location 00 sta 5 lxi h,bdos shld 6 ;jmp bdos at location 5 if not test sta 7*8 ;jmp to mon80 (may have been changed by ddt) lxi h,mon80 shld 7*8+1 endif ; leave iobyte set ; previously selected disk was b, send parameter to cpm lda cdisk ;last log; MDS-800 I/O Drivers for CP/M 2.2 ; (four drive single density version) ; ; Version 2.2 February, 1980 ; vers equ 22 ;version 2.2 ; ; Copyright (c) 1980 ; Digital Research ; Box 579, Pacific Grove ; California, 93950 ; ; true equ 0ffffh ;value of "true" false equ not true ;"false" test equ false ;true if test bios ; if test bias equ 03400h ;base of CCP in test system endif if not test bias equ 0000h ;generate relocatable cp/m system endif ; patch equ 1600h ; org patch cpmb equ $-patch ;base of cpm console processor bdos equ 806h+cpmb ;basic dos (resident portion) cpml equ $-cpmb ;length (in bytes) of cpm system nsects equ cpml/128 ;number of sectors to load offset equ 2 ;number of disk tracks used by cp/m cdisk equ 0004h ;address of last logged disk on warm start buff equ 0080h ;default buffer address retry equ 10 ;max retries on disk i/o before error ; ; perform following functions ; boot cold start ; wboot warm start (save i/o byte) ; (boot and wboot are the sameh ;reader in to reg-a co equ 0f809h ;console char from c to console out po equ 0f80ch ;punch char from c to punch device lo equ 0f80fh ;list from c to list device csts equ 0f812h ;console status 00/ff to register a ; ; disk ports and commands base equ 78h ;base of disk command io ports dstat equ base ;disk status (input) rtype equ base+1 ;result type (input) rbyte equ base+3 ;result byte (input) ; ilow equ base+1 ;iopb low address (output) ihigh equ base+2 ;iopb high address (output) ; readf equ 4h ;read function writf equ 6h ;write function recal equ 3h ;recalibrate drive iordy equ 4h ;i/o finished mask cr equ 0dh ;carriage return lf equ 0ah ;line feed ; signon: ;signon message: xxk cp/m vers y.y db cr,lf,lf if test db '32' ;32k example bios endif if not test db '00' ;memory size filled by relocator endif db 'k CP/M vers ' db vers/10+'0','.',vers mod 10+'0' db cr,lf,0 ; boot: ;print signon message and go to ccp ; (note: mds boot initialized iobyte at 0003h) lxi  ged disk number mov c,a ;send to ccp to log it in ei jmp cpmb ; ; error condition occurred, print message and retry booterr: pop b ;recall counts dcr c jz booter0 ; try again push b jmp wboot0 ; booter0: ; otherwise too many retries lxi h,bootmsg call prmsg jmp rmon80 ;mds hardware monitor ; bootmsg: db '?boot',0 ; ; const: ;console status to reg-a ; (exactly the same as mds call) jmp csts ; conin: ;console character to reg-a call ci ani 7fh ;remove parity bit ret ; conout: ;console character from c to console out jmp co ; list: ;list device out ; (exactly the same as mds call) jmp lo ; listst: ;return list status xra a ret ;always not ready ; punch: ;punch device out ; (exactly the same as mds call) jmp po ; reader: ;reader character in to reg-a ; (exactly the same as mds call) jmp ri ; home: ;move to home position ; treat as track 00 seek mvi c,0 jmp settrk ; seldsk: ;select disk given by register c lxi h,0000h ;return 000select proper disk bank mov m,a ;set disk select bit on/off ret ; waitio: mvi c,retry ;max retries before perm error rewait: ; start the i/o function and wait for completion call intype ;in rtype call inbyte ;clears the controller ; lda dbank ;set bank flags ora a ;zero if drive 0,1 and nz if 2,3 mvi a,iopb and 0ffh ;low address for iopb mvi b,iopb shr 8 ;high address for iopb jnz iodr1 ;drive bank 1? out ilow ;low address to controller mov a,b out ihigh ;high address jmp wait0 ;to wait for complete ; iodr1: ;drive bank 1 out ilow+10h ;88 for drive bank 10 mov a,b out ihigh+10h ; wait0: call instat ;wait for completion ani iordy ;ready? jz wait0 ; ; check io completion ok call intype ;must be io complete (00) unlinked ; 00 unlinked i/o complete, 01 linked i/o complete (not used) ; 10 disk status changed 11 (not used) cpi 10b ;ready status change? jz wready ; ; must be 00 in the accumulator ora a jnz werror ;some other condition,; Skeletal CBIOS for first level of CP/M 2.0 alteration ; msize equ 20 ;cp/m version memory size in kilobytes ; ; "bias" is address offset from 3400H for memory systems ; than 16K (referred to as "b" throughout the text). ; bias equ (msize-20)*1024 ccp equ 3400H+bias ;base of ccp bdos equ ccp+806h ;base of bdos bios equ ccp+1600h ;base of bios cdisk equ 0004H ;current disk number 0=A,...,15=P iobyte equ 0003h ;intel i/o byte ; org bios ;origin of this program nsects equ ($-ccp)/128 ;warm start sector count ; ; jump vector for individual subroutines jmp boot ;cold start wboote: jmp wboot ;warm start jmp const ;console status jmp conin ;console character in jmp conout ;console character out jmp list ;list character out jmp punch ;punch character out jmp reader ;reader character out jmp home ;move head to home position jmp seldsk ;select disk jmp settrk ;set track number jmp setsec ;set sector number jmp setdma ;set dma address jmp read ;read disk jmp 0 if error mov a,c cpi ndisks ;too large? rnc ;leave HL = 0000 ; ani 10b ;00 00 for drive 0,1 and 10 10 for drive 2,3 sta dbank ;to select drive bank mov a,c ;00, 01, 10, 11 ani 1b ;mds has 0,1 at 78, 2,3 at 88 ora a ;result 00? jz setdrive mvi a,00110000b ;selects drive 1 in bank setdrive: mov b,a ;save the function lxi h,iof ;io function mov a,m ani 11001111b ;mask out disk number ora b ;mask in new disk number mov m,a ;save it in iopb mov l,c mvi h,0 ;HL=disk number dad h ;*2 dad h ;*4 dad h ;*8 dad h ;*16 lxi d,dpbase dad d ;HL=disk header table address ret ; ; settrk: ;set track address given by c lxi h,iot mov m,c ret ; setsec: ;set sector number given by c lxi h,ios mov m,c ret sectran: ;translate sector bc using table at de mvi b,0 ;double precision sector number in BC xchg ;translate table address to HL dad b ;translate(sector) address mov a,m ;translated sector number to A sta ios mov l,a ;return sector number in  retry ; ; check i/o error bits call inbyte ral jc wready ;unit not ready rar ani 11111110b ;any other errors? (deleted data ok) jnz werror ; ; read or write is ok, accumulator contains zero ret ; wready: ;not ready, treat as error for now call inbyte ;clear result byte jmp trycount ; werror: ;return hardware malfunction (crc, track, seek, etc.) ; the mds controller has returned a bit in each position ; of the accumulator, corresponding to the conditions: ; 0 - deleted data (accepted as ok above) ; 1 - crc error ; 2 - seek error ; 3 - address error (hardware malfunction) ; 4 - data over/under flow (hardware malfunction) ; 5 - write protect (treated as not ready) ; 6 - write error (hardware malfunction) ; 7 - not ready ; (accumulator bits are numbered 7 6 5 4 3 2 1 0) ; ; it may be useful to filter out the various conditions, ; but we will get a permanent error message if it is not ; recoverable. in any case, the not ready condition is ; treated as a separate condiwrite ;write disk jmp listst ;return list status jmp sectran ;sector translate ; ; fixed data tables for four-drive standard ; IBM-compatible 8" disks ; disk parameter header for disk 00 dpbase: dw trans,0000H dw 0000H,0000H dw dirbf,dpblk dw chk00,all00 ; disk parameter header for disk 01 dw trans,0000H dw 0000H,0000H dw dirbf,dpblk dw chk01,all01 ; disk parameter header for disk 02 dw trans,0000H dw 0000H,0000H dw dirbf,dpblk dw chk02,all02 ; disk parameter header for disk 03 dw trans,0000H dw 0000H,0000H dw dirbf,dpblk dw chk03,all03 ; ; sector translate vector trans: db 1,7,13,19 ;sectors 1,2,3,4 db 25,5,11,17 ;sectors 5,6,7,8 db 23,3,9,15 ;sectors 9,10,11,12 db 21,2,8,14 ;sectors 13,14,15,16 db 20,26,6,12 ;sectors 17,18,19,20 db 18,24,4,10 ;sectors 21,22,23,24 db 16,22 ;sectors 25,26 ; dpblk: ;disk parameter block, common to all disks dw 26 ;sectors per track db 3 ;block shift factor db 7 ;block mask db 0 ;null mask dw 242 ;disL ret ; setdma: ;set dma address given by regs b,c mov l,c mov h,b shld iod ret ; read: ;read next disk record (assuming disk/trk/sec/dma set) mvi c,readf ;set to read function call setfunc call waitio ;perform read function ret ;may have error set in reg-a ; ; write: ;disk write function mvi c,writf call setfunc ;set to write function call waitio ret ;may have error set ; ; ; utility subroutines prmsg: ;print message at h,l to 0 mov a,m ora a ;zero? rz ; more to print push h mov c,a call conout pop h inx h jmp prmsg ; setfunc: ; set function for next i/o (command in reg-c) lxi h,iof ;io function address mov a,m ;get it to accumulator for masking ani 11111000b ;remove previous command ora c ;set to new command mov m,a ;replaced in iopb ; the mds-800 controller requires disk bank bit in sector byte ; mask the bit from the current i/o function ani 00100000b ;mask the disk select bit lxi h,ios ;address the sector select byte ora m ;tion for later improvement trycount: ; register c contains retry count, decrement 'til zero dcr c jnz rewait ;for another try ; ; cannot recover from error mvi a,1 ;error code ret ; ; intype, inbyte, instat read drive bank 00 or 10 intype: lda dbank ora a jnz intyp1 ;skip to bank 10 in rtype ret intyp1: in rtype+10h ;78 for 0,1 88 for 2,3 ret ; inbyte: lda dbank ora a jnz inbyt1 in rbyte ret inbyt1: in rbyte+10h ret ; instat: lda dbank ora a jnz insta1 in dstat ret insta1: in dstat+10h ret ; ; ; ; data areas (must be in ram) dbank: db 0 ;disk bank 00 if drive 0,1 ; 10 if drive 2,3 iopb: ;io parameter block db 80h ;normal i/o operation iof: db readf ;io function, initial read ion: db 1 ;number of sectors to read iot: db offset ;track number ios: db 1 ;sector number iod: dw buff ;io address ; ; ; define ram areas for bdos operation endef end  k size-1 dw 63 ;directory max db 192 ;alloc 0 db 0 ;alloc 1 dw 16 ;check size dw 2 ;track offset ; ; end of fixed tables ; ; individual subroutines to perform each function boot: ;simplest case is to just perform parameter initialization xra a ;zero in the accum sta iobyte ;clear the iobyte sta cdisk ;select disk zero jmp gocpm ;initialize and go to cp/m ; wboot: ;simplest case is to read the disk until all sectors loaded lxi sp,80h ;use space below buffer for stack mvi c,0 ;select disk 0 call seldsk call home ;go to track 00 ; mvi b,nsects ;b counts # of sectors to load mvi c,0 ;c has the current track number mvi d,2 ;d has the next sector to read ; note that we begin by reading track 0, sector 2 since sector 1 ; contains the cold start loader, which is skipped in a warm start lxi h,ccp ;base of cp/m (initial load point) load1: ;load one more sector push b ;save sector count, current track push d ;save next sector to read push h ;save dma addrcter output from register c mov a,c ;get to accumulator ds 10h ;space for output routine ret ; list: ;list character from register c mov a,c ;character to register a ret ;null subroutine ; listst: ;return list status (0 if not ready, 1 if ready) xra a ;0 is always ok to return ret ; punch: ;punch character from register c mov a,c ;character to register a ret ;null subroutine ; ; reader: ;read character into register a from reader device mvi a,1ah ;enter end of file for now (replace later) ani 7fh ;remember to strip parity bit ret ; ; ; i/o drivers for the disk follow ; for now, we will simply store the parameters away for use ; in the read and write subroutines ; home: ;move to the track 00 position of current drive ; translate this call into a settrk call with parameter 00 mvi c,0 ;select track 0 call settrk ret ;we will move to 00 on first read/write ; seldsk: ;select disk given by register C lxi h,0000h ;error return code mov a,c sta diskno cpi 4 bytes for expansion dmaad: ds 2 ;direct memory address diskno: ds 1 ;disk number 0-15 ; ; scratch ram area for BDOS use begdat equ $ ;beginning of data area dirbf: ds 128 ;scratch directory area all00: ds 31 ;allocation vector 0 all01: ds 31 ;allocation vector 1 all02: ds 31 ;allocation vector 2 all03: ds 31 ;allocation vector 3 chk00: ds 16 ;check vector 0 chk01: ds 16 ;check vector 1 chk02: ds 16 ;check vector 2 chk03: ds 16 ;check vector 3 ; enddat equ $ ;end of data area datsiz equ $-begdat;size of data area end maad' (0-65535) ds 256 ;space reserved for I/O drivers mvi a,1 ;error condition ret ;replaced when filled-in ; ; the remainder of the CBIOS is reserved uninitialized ; data area, and does not need to be a part of the ; system memory image (the space must be available, ; however, between "begdat" and "enddat"). ; track: ds 2 ;two bytes for expansion sector: ds 2 ;two ess mov c,d ;get sector address to register c call setsec ;set sector address from register c pop b ;recall dma address to b,c push b ;replace on stack for later recall call setdma ;set dma address from b,c ; ; drive set to 0, track set, sector set, dma address set call read cpi 00h ;any errors? jnz wboot ;retry the entire boot if an error occurs ; ; no error, move to next sector pop h ;recall dma address lxi d,128 ;dma=dma+128 dad d ;new dma address is in h,l pop d ;recall sector address pop b ;recall number of sectors remaining, and current trk dcr b ;sectors=sectors-1 jz gocpm ;transfer to cp/m if all have been loaded ; ; more sectors remain to load, check for track change inr d mov a,d ;sector=27?, if so, change tracks cpi 27 jc load1 ;carry generated if sector<27 ; ; end of current track, go to next track mvi d,1 ;begin with first sector of next track inr c ;track=track+1 ; ; save register state, and change tracks push b push d push h call settr;must be between 0 and 3 rnc ;no carry if 4,5,... ; disk number is in the proper range ds 10 ;space for disk select ; compute proper disk parameter header address lda diskno mov l,a ;L=disk number 0,1,2,3 mvi h,0 ;high order zero dad h ;*2 dad h ;*4 dad h ;*8 dad h ;*16 (size of each header) lxi d,dpbase dad d ;HL=.dpbase(diskno*16) ret ; settrk: ;set track given by register c mov a,c sta track ds 10h ;space for track select ret ; setsec: ;set sector given by register c mov a,c sta sector ds 10h ;space for sector select ret ; sectran: ;translate the sector given by BC using the ;translate table given by DE xchg ;HL=.trans dad b ;HL=.trans(sector) mov l,m ;L = trans(sector) mvi h,0 ;HL= trans(sector) ret ;with value in HL ; setdma: ;set dma address given by registers b and c mov l,c ;low order address mov h,b ;high order address shld dmaad ;save the address ds 10h ;space for setting the dma address ret ; read: ;perform read operatiok ;track address set from register c pop h pop d pop b jmp load1 ;for another sector ; ; end of load operation, set parameters and go to cp/m gocpm: mvi a,0c3h ;c3 is a jmp instruction sta 0 ;for jmp to wboot lxi h,wboote ;wboot entry point shld 1 ;set address field for jmp at 0 ; sta 5 ;for jmp to bdos lxi h,bdos ;bdos entry point shld 6 ;address field of jump at 5 to bdos ; lxi b,80h ;default dma address is 80h call setdma ; ei ;enable the interrupt system lda cdisk ;get current disk number mov c,a ;send to the ccp jmp ccp ;go to cp/m for further processing ; ; ; simple i/o handlers (must be filled in by user) ; in each case, the entry point is provided, with space reserved ; to insert your own code ; const: ;console status, return 0ffh if character ready, 00h if not ds 10h ;space for status subroutine mvi a,00h ret ; conin: ;console character into register a ds 10h ;space for input routine ani 7fh ;strip parity bit ret ; conout: ;console charan (usually this is similar to write ; so we will allow space to set up read command, then use ; common code in write) ds 10h ;set up read command jmp waitio ;to perform the actual i/o ; write: ;perform a write operation ds 10h ;set up write command ; waitio: ;enter here from read and write to perform the actual i/o ; operation. return a 00h in register a if the operation completes ; properly, and 01h if an error occurs during the read or write ; ; in this case, we have saved the disk number in 'diskno' (0,1) ; the track number in 'track' (0-76) ; the sector number in 'sector' (1-26) ; the dma address in 'dmaad' (0-65535) ds 256 ;space reserved for I/O drivers mvi a,1 ;error condition ret ;replaced when filled-in ; ; the remainder of the CBIOS is reserved uninitialized ; data area, and does not need to be a part of the ; system memory image (the space must be available, ; however, between "begdat" and "enddat"). ; track: ds 2 ;two bytes for expansion sector: ds 2 ;two  ;***************************************************** ;* * ;* Sector Deblocking Algorithms for CP/M 2.0 * ;* * ;***************************************************** ; ; utility macro to compute sector mask smask macro hblk ;; compute log2(hblk), return @x as result ;; (2 ** @x = hblk on return) @y set hblk @x set 0 ;; count right shifts of @y until = 1 rept 8 if @y = 1 exitm endif ;; @y is not 1, shift right one position @y set @y shr 1 @x set @x + 1 endm endm ; ;***************************************************** ;* * ;* CP/M to host disk constants * ;* * ;***************************************************** blksiz equ 2048 ;CP/M allocation size hstsiz equ 512 ;host disk sector size hstspt equ 20 ;host disk sectors/trk hstblk equ hstsiz/1 * ;* the previous BIOS defintion for READ. * ;* * ;***************************************************** read: ;read the selected CP/M sector xra a sta unacnt mvi a,1 sta readop ;read operation sta rsflag ;must read data mvi a,wrual sta wrtype ;treat as unalloc jmp rwoper ;to perform the read ; ;***************************************************** ;* * ;* The WRITE entry point takes the place of * ;* the previous BIOS defintion for WRITE. * ;* * ;***************************************************** write: ;write the selected CP/M sector xra a ;0 to accumulator sta readop ;not a read operation mov a,c ;write type in c sta wrtype cpi wrual ;write unallocated? jnz chkuna ;check for unalloc ; ; write to unallocated, set parameters mvi a,blksiz/128 ;next unalloc recs sta unacnt lda setrack? lxi h,hsttrk call sektrkcmp ;sektrk = hsttrk? jnz nomatch ; ; same disk, same track, same buffer? lda sekhst lxi h,hstsec ;sekhst = hstsec? cmp m jz match ;skip if match ; nomatch: ;proper disk, but not correct sector lda hstwrt ;host written? ora a cnz writehst ;clear host buff ; filhst: ;may have to fill the host buffer lda sekdsk sta hstdsk lhld sektrk shld hsttrk lda sekhst sta hstsec lda rsflag ;need to read? ora a cnz readhst ;yes, if 1 xra a ;0 to accum sta hstwrt ;no pending write ; match: ;copy data to or from buffer lda seksec ;mask buffer number ani secmsk ;least signif bits mov l,a ;ready to shift mvi h,0 ;double count rept 7 ;shift left 7 dad h endm ; hl has relative host buffer address lxi d,hstbuf dad d ;hl = host address xchg ;now in DE lhld dmaadr ;get/put CP/M data mvi c,128 ;length of move lda readop ;which way? ora a jnz rwmove ;skip if read ; ; write operation, mark and switch28 ;CP/M sects/host buff cpmspt equ hstblk * hstspt ;CP/M sectors/track secmsk equ hstblk-1 ;sector mask smask hstblk ;compute sector mask secshf equ @x ;log2(hstblk) ; ;***************************************************** ;* * ;* BDOS constants on entry to write * ;* * ;***************************************************** wrall equ 0 ;write to allocated wrdir equ 1 ;write to directory wrual equ 2 ;write to unallocated ; ;***************************************************** ;* * ;* The BDOS entry points given below show the * ;* code which is relevant to deblocking only. * ;* * ;***************************************************** ; ; DISKDEF macro, or hand coded tables go here dpbase equ $ ;disk param block base ; boot: wboot: ;enter here on systemkdsk ;disk to seek sta unadsk ;unadsk = sekdsk lhld sektrk shld unatrk ;unatrk = sectrk lda seksec sta unasec ;unasec = seksec ; chkuna: ;check for write to unallocated sector lda unacnt ;any unalloc remain? ora a jz alloc ;skip if not ; ; more unallocated records remain dcr a ;unacnt = unacnt-1 sta unacnt lda sekdsk ;same disk? lxi h,unadsk cmp m ;sekdsk = unadsk? jnz alloc ;skip if not ; ; disks are the same lxi h,unatrk call sektrkcmp ;sektrk = unatrk? jnz alloc ;skip if not ; ; tracks are the same lda seksec ;same sector? lxi h,unasec cmp m ;seksec = unasec? jnz alloc ;skip if not ; ; match, move to next sector for future ref inr m ;unasec = unasec+1 mov a,m ;end of track? cpi cpmspt ;count CP/M sectors jc noovf ;skip if no overflow ; ; overflow to next track mvi m,0 ;unasec = 0 lhld unatrk inx h shld unatrk ;unatrk = unatrk+1 ; noovf: ;match found, mark as unnecessary read xra a ;0 to accumulator sta rsfl direction mvi a,1 sta hstwrt ;hstwrt = 1 xchg ;source/dest swap ; rwmove: ;C initially 128, DE is source, HL is dest ldax d ;source character inx d mov m,a ;to dest inx h dcr c ;loop 128 times jnz rwmove ; ; data has been moved to/from host buffer lda wrtype ;write type cpi wrdir ;to directory? lda erflag ;in case of errors rnz ;no further processing ; ; clear host buffer for directory write ora a ;errors? rnz ;skip if so xra a ;0 to accum sta hstwrt ;buffer written call writehst lda erflag ret ; ;***************************************************** ;* * ;* Utility subroutine for 16-bit compare * ;* * ;***************************************************** sektrkcmp: ;HL = .unatrk or .hsttrk, compare with sektrk xchg lxi h,sektrk ldax d ;low byte compare cmp m ;same? rnz ;return if not ; low bytes equal, test high 1s boot to initialize xra a ;0 to accumulator sta hstact ;host buffer inactive sta unacnt ;clear unalloc count ret ; home: ;home the selected disk home: lda hstwrt ;check for pending write ora a jnz homed sta hstact ;clear host active flag homed: ret ; seldsk: ;select disk mov a,c ;selected disk number sta sekdsk ;seek disk number mov l,a ;disk number to HL mvi h,0 rept 4 ;multiply by 16 dad h endm lxi d,dpbase ;base of parm block dad d ;hl=.dpb(curdsk) ret ; settrk: ;set track given by registers BC mov h,b mov l,c shld sektrk ;track to seek ret ; setsec: ;set sector given by register c mov a,c sta seksec ;sector to seek ret ; setdma: ;set dma address given by BC mov h,b mov l,c shld dmaadr ret ; sectran: ;translate sector number BC mov h,b mov l,c ret ; ;***************************************************** ;* * ;* The READ entry point takes the place of ag ;rsflag = 0 jmp rwoper ;to perform the write ; alloc: ;not an unallocated record, requires pre-read xra a ;0 to accum sta unacnt ;unacnt = 0 inr a ;1 to accum sta rsflag ;rsflag = 1 ; ;***************************************************** ;* * ;* Common code for READ and WRITE follows * ;* * ;***************************************************** rwoper: ;enter here to perform the read/write xra a ;zero to accum sta erflag ;no errors (yet) lda seksec ;compute host sector rept secshf ora a ;carry = 0 rar ;shift right endm sta sekhst ;host sector to seek ; ; active host sector? lxi h,hstact ;host active flag mov a,m mvi m,1 ;always becomes 1 ora a ;was it already? jz filhst ;fill host if not ; ; host buffer active, same as seek buffer? lda sekdsk lxi h,hstdsk ;same disk? cmp m ;sekdsk = hstdsk? jnz nomatch ; ; same disk, same  inx d inx h ldax d cmp m ;sets flags ret ; ;***************************************************** ;* * ;* WRITEHST performs the physical write to * ;* the host disk, READHST reads the physical * ;* disk. * ;* * ;***************************************************** writehst: ;hstdsk = host disk #, hsttrk = host track #, ;hstsec = host sect #. write "hstsiz" bytes ;from hstbuf and return error flag in erflag. ;return erflag non-zero if error ret ; readhst: ;hstdsk = host disk #, hsttrk = host track #, ;hstsec = host sect #. read "hstsiz" bytes ;into hstbuf and return error flag in erflag. ret ; ;***************************************************** ;* * ;* Unitialized RAM data areas * ;* * ;***************************************************** ;tracks to skip (word) ; [0] is an optional 0 which forces 16K/directory entry ; ; for convenience, the form ; dn,dm ; defines disk dn as having the same characteristics as ; a previously defined disk dm. ; ; a standard four drive CP/M system is defined by ; disks 4 ; diskdef 0,1,26,6,1024,243,64,64,2 ; dsk set 0 ; rept 3 ; dsk set dsk+1 ; diskdef %dsk,0 ; endm ; endef ; ; the value of "begdat" at the end of assembly defines the ; beginning of the uninitialize ram area above the bios, ; while the value of "enddat" defines the next location ; following the end of the data area. the size of this ; area is given by the value of "datsiz" at the end of the ; assembly. note that the allocation vector will be quite ; large if a large disk size is defined with a small block ; size. ; dskhdr macro dn ;; define a single disk header list dpe&dn: dw xlt&dn,0000h ;translate table dw 0000h,0000h ;scratch area dw dirbuf,dpb&dn ;dir buff,parm block dw csv&dn,alv&dn ;check, alloc vec > 256 extmsk set (extmsk shr 1) endif ;; may be optional [0] in last position if not nul k16 extmsk set k16 endif ;; now generate directory reservation bit vector dirrem set dir ;;# remaining to process dirbks set bls/32 ;;number of entries per block dirblk set 0 ;;fill with 1's on each loop rept 16 if dirrem=0 exitm endif ;; not complete, iterate once again ;; shift right and add 1 high order bit dirblk set (dirblk shr 1) or 8000h if dirrem > dirbks dirrem set dirrem-dirbks else dirrem set 0 endif endm dpbhdr dn ;;generate equ $ ddw %sectors,<;sec per track> ddb %blkshf,<;block shift> ddb %blkmsk,<;block mask> ddb %extmsk,<;extnt mask> ddw %(dks)-1,<;disk size-1> ddw %(dir)-1,<;directory max> ddb %dirblk shr 8,<;alloc0> ddb %dirblk and 0ffh,<;alloc1> ddw %(cks)/4,<;check size> ddw %ofs,<;offset> ;; generate the translate table, if requested if nul skf xlt&dn equ 0 ;no xlate table else if skf = 0 xlt&dn equ 0 ;no xlate table else ;; genera sekdsk: ds 1 ;seek disk number sektrk: ds 2 ;seek track number seksec: ds 1 ;seek sector number ; hstdsk: ds 1 ;host disk number hsttrk: ds 2 ;host track number hstsec: ds 1 ;host sector number ; sekhst: ds 1 ;seek shr secshf hstact: ds 1 ;host active flag hstwrt: ds 1 ;host written flag ; unacnt: ds 1 ;unalloc rec cnt unadsk: ds 1 ;last unalloc disk unatrk: ds 2 ;last unalloc track unasec: ds 1 ;last unalloc sector ; erflag: ds 1 ;error reporting rsflag: ds 1 ;read sector flag readop: ds 1 ;1 if read operation wrtype: ds 1 ;write operation type dmaadr: ds 2 ;last dma address hstbuf: ds hstsiz ;host buffer ; ;***************************************************** ;* * ;* The ENDEF macro invocation goes here * ;* * ;***************************************************** end tors endm ; disks macro nd ;; define nd disks ndisks set nd ;;for later reference dpbase equ $ ;base of disk parameter blocks ;; generate the nd elements dsknxt set 0 rept nd dskhdr %dsknxt dsknxt set dsknxt+1 endm endm ; dpbhdr macro dn dpb&dn equ $ ;disk parm block endm ; ddb macro data,comment ;; define a db statement db data comment endm ; ddw macro data,comment ;; define a dw statement dw data comment endm ; gcd macro m,n ;; greatest common divisor of m,n ;; produces value gcdn as result ;; (used in sector translate table generation) gcdm set m ;;variable for m gcdn set n ;;variable for n gcdr set 0 ;;variable for r rept 65535 gcdx set gcdm/gcdn gcdr set gcdm - gcdx*gcdn if gcdr = 0 exitm endif gcdm set gcdn gcdn set gcdr endm endm ; diskdef macro dn,fsc,lsc,skf,bls,dks,dir,cks,ofs,k16 ;; generate the set statements for later tables if nul lsc ;; current disk dn same as previous fsc dpb&dn equ dpb&fsc ;equivalent parameters als&dn eqte the translate table nxtsec set 0 ;;next sector to fill nxtbas set 0 ;;moves by one on overflow gcd %sectors,skf ;; gcdn = gcd(sectors,skew) neltst set sectors/gcdn ;; neltst is number of elements to generate ;; before we overlap previous elements nelts set neltst ;;counter xlt&dn equ $ ;translate table rept sectors ;;once for each sector if sectors < 256 ddb %nxtsec+(fsc) else ddw %nxtsec+(fsc) endif nxtsec set nxtsec+(skf) if nxtsec >= sectors nxtsec set nxtsec-sectors endif nelts set nelts-1 if nelts = 0 nxtbas set nxtbas+1 nxtsec set nxtbas nelts set neltst endif endm endif ;;end of nul fac test endif ;;end of nul bls test endm ; defds macro lab,space lab: ds space endm ; lds macro lb,dn,val defds lb&dn,%val&dn endm ; endef macro ;; generate the necessary ram data areas begdat equ $ dirbuf: ds 128 ;directory access buffer dsknxt set 0 rept ndisks ;;once for each disk lds alv,%dsknxt,als lds csv,%dsknxt,css dsknxt set dsknxt+1 endm e; CP/M 2.0 disk re-definition library ; ; Copyright (c) 1979 ; Digital Research ; Box 579 ; Pacific Grove, CA ; 93950 ; ; CP/M logical disk drives are defined using the ; macros given below, where the sequence of calls ; is: ; ; disks n ; diskdef parameter-list-0 ; diskdef parameter-list-1 ; ... ; diskdef parameter-list-n ; endef ; ; where n is the number of logical disk drives attached ; to the CP/M system, and parameter-list-i defines the ; characteristics of the ith drive (i=0,1,...,n-1) ; ; each parameter-list-i takes the form ; dn,fsc,lsc,[skf],bls,dks,dir,cks,ofs,[0] ; where ; dn is the disk number 0,1,...,n-1 ; fsc is the first sector number (usually 0 or 1) ; lsc is the last sector number on a track ; skf is optional "skew factor" for sector translate ; bls is the data block size (1024,2048,...,16384) ; dks is the disk size in bls increments (word) ; dir is the number of directory elements (word) ; cks is the number of dir elements to checksum ; ofs is the number of u als&fsc ;same allocation vector size css&dn equ css&fsc ;same checksum vector size xlt&dn equ xlt&fsc ;same translate table else secmax set lsc-(fsc) ;;sectors 0...secmax sectors set secmax+1;;number of sectors als&dn set (dks)/8 ;;size of allocation vector if ((dks) mod 8) ne 0 als&dn set als&dn+1 endif css&dn set (cks)/4 ;;number of checksum elements ;; generate the block shift value blkval set bls/128 ;;number of sectors/block blkshf set 0 ;;counts right 0's in blkval blkmsk set 0 ;;fills with 1's from right rept 16 ;;once for each bit position if blkval=1 exitm endif ;; otherwise, high order 1 not found yet blkshf set blkshf+1 blkmsk set (blkmsk shl 1) or 1 blkval set blkval/2 endm ;; generate the extent mask byte blkval set bls/1024 ;;number of kilobytes/block extmsk set 0 ;;fill from right with 1's rept 16 if blkval=1 exitm endif ;; otherwise more to shift extmsk set (extmsk shl 1) or 1 blkval set blkval/2 endm ;; may be double byte allocation if (dks)nddat equ $ datsiz equ $-begdat ;; db 0 at this point forces hex record endm ; = gcd(sectors,skew) neltst set sectors/gcdn ;; neltst is number of elements to generate ;; before we overlap previous elements nelts set neltst ;;counter xlt&dn equ $ ;translate table rept sectors ;;once for each sector if sectors < 256 ddb %nxtsec+(fsc) else ddw %nxtsec+(fsc) endif nxtsec set nxtsec+(skf) if nxtsec >= sectors nxtsec set nxtsec-sectors endif nelts set nelts-1 if nelts = 0 nxtbas set nxtbas+1 nxtsec set nxtbas nelts set neltst endif endm endif ;;end of nul fac test endif ;;end of nul bls test endm ; defds macro lab,space lab: ds space endm ; lds macro lb,dn,val defds lb&dn,%val&dn endm ; endef macro ;; generate the necessary ram data areas begdat equ $ dirbuf: ds 128 ;directory access buffer dsknxt set 0 rept ndisks ;;once for each disk lds alv,%dsknxt,als lds csv,%dsknxt,css dsknxt set dsknxt+1 endm e=1 initialize both sides of disk (Y/N) ͨ Y(N 26 media type ................ N( DOUBLE SIDED SINGLE SIDED =1 verify disk after formatting (Y/N) ͨ Y(N 26 read/write verify ......... Y( NO!" YES!m":A2W =1 press when ready to format disk in drive A: ...  hG( =" Ð (U *** DRIVE NOT READY *** (drive door open? disk turned the wrong way?)w(W *** WRITE PROTECTED *** (place tab over write protect notch in diskette)G(a *** DRIVE MOTOR SPEED OUT OF RANGE *** (rotational period=* ' milliseconds) =1 =3 1 2 3 4 5 6 7=4 012345678901234567890123456789012345678901234567890123456789012345678901234567890=5 ----------+---------+---------+---------+---------+---------+---------+---------=6 :N(>2Fs 2F:N( s ͦ  =1 FORMATTING:FG :N( BOTTOM  TOP SIDE ..... (press any key to abort)=6 =:$J >BJ v v ! 6 84O* ͧ  *ͧ `8 *ͧ  h 8OJ   J h y:͖  2ɯ2 ~#J > J :20>.J  ? > - >- O!i ˀ^#V#(R8<00 @ yJ }0J 'e L > N !,-6G 2E:FG(*|`:oG> L >&@.G! V >.2!:Y̆ :J *|`.G>2E>@N * :E:V >.2*:Y̆ :J :E<2E8*|`:oG>@N * :E:V >.2*:Y̆ :J :E<2EM8L >+2!,> !,> !, :,!E :-!FG>?2|GGO (*#"12ɯ<2!" " " *" ! ">ӊ:_! ~>> L > N ۅ2 Oۅ * R8>CۅD0* R8>+* R8[ !R8>ӊ* "L >ͦ >ӊ* "ɊJ*>>2* #" ! ۅ(w* [ " R" Myx! YQ1+ G4 Cal-Tex Computers 8 inch Disk Formatter 21-Sept-82 G0 This program destroys all pre-recorded information on a disk in the process of formatting it. Therefore we recommend that you remove any valuable disks that may be in the drives at this time. press any key when ready to continue ...  ="  ( ="  returning to CP/M ...  density sectors length (* indicates non-standard format) ------- ------- ------ 2:1J ) : single  double :&o)^#V|y  * |&h! |bk! :<2 =1 enter number of format desired (1 to 8) ͨ 189012&o) ^#VS6 <--- format selected ........... :1J =1 enter disk (A,B,C OR D) to be initialized ͨ A8E0A26 disk being initialized .... J >:J =1 enter physical sector skew (from 1 to 9) ͨ 18:026 sector skew ............... J YQ(##. ͡ m,χ[ G* RB8L >>> = ɷ ͫ X͵ (! YQ,YQ>N . ͡ m,χ! ! !   N#F#,:F#!G:Ew:FG(  ~#w :@~ (!= :: x F#: bkwF#~#GD!G~(uqEu |0{^~(#= N FɱEo(  22N dN N4N N  NPN 2N N 5NPN 2N N SN2N  N 5NPN 2N N sN 2N N (N!$ W! $ G !52>2!6f!> 2>2EAG>? >  .... Cal-Tex Computers 60K CP/M version 2.2 .... ......... release date 15-September-82 ......... lØPSViVSÇ3ÊÏÔFYZÙs1ͦ{s1{s1`{1R!"2<2 h!~8`,0F>,,!!0N#^#V#~ :8O!~ ""y2  :<2!"5 cannot boot8! y >Ӂہ >ȯZ(yӀہGۀ˿ہG(ۀC!qC`iz(n&#!y2<o! = "C#FR>22>:2O :2O! !*( (!!":Gm!"!K:2&o))  ͒> Ò> Ò͘~#͌ì _2<ԯ2 Շ!۶2:2a{_:۷ʖ:۷>Ľʖ:=2–!B!6#5ʖ:۷Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ "ַ"͌#>?͌͘ =_.:;<> Oօo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6"  *>2~ R>͍:(R :(7(:2*":2j *2~ R͍2y(+(:! *[R !~ "RER~2:2*" 57(:2*":2" !4~ݾ8 ( 6*#"G:=?<2:=ݦ &o))))))) [: >2:!*[R:!ɯ22:*!">2͘!6!"2͘!2:O((:M8 MOx!((*:O:($'(_:A2o!_5{85{ !5:?5:?>!5 (ɯ2<~#O dP P0O  0yI BIOS error on A: not readywrt protectwrt faultnot foundbad crcoverrundrqbusy track sector ? #~?  xDIR ERA TYPESAVEREN USER]!yO#< Ty#O 3ׯ21y_͸2y2ͽ:Է˜1͘A͌>>͌92^ :۷¥.!_~#fow]٭ڎڥ!v"!çREAD ERRORçNO FILE^:۷ ! ~ 3#0 Wx x ր ւ G ~ # 3x~#B!Y~ɯ2:۷=!۾ý:۷=!۾:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ ٯw4!Y~ʆ͌†t=ʆf ^ T ٯ2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yڸpsp2mÆÆf ͧÆFILE EXISTS _: É: :۷ʉ=2)ͽÉ T!@k!}|q1y{0!B0}y|zx0y0{00Ԁ\X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<ԯ2 Շ!۶2:2a{_:۷ʖ:۷>Ľʖ:=2–!B!6#5ʖ:۷Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ "ַ"͌#>?͌͘ =_.:;<> Oօo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" #~?  xDIR ERA TYPESAVEREN USER]!yO#< Ty#O 3ׯ21y_͸2y2ͽ:Է=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: !۶ Â$$$ SUB]ܙܥܫܱ"C{2!"E9"1A߯22!ty)K!G_^#V*Cސ~E ,&-AGMSߛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :߷E B 2>: ߷b# : ߷y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! ߾ Hù H H $O͐: 2 *CN# x: 2 p&x~+é7ݯ2 H! >w_: ! ߾5ͤNkͱ¦ͱxʊ#Nx: ߷! ߖ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#,COPYRIGHT (C) DIGITAL RESEARCH, 1979 1] ʑ?ʑ! __0 r))) O @|r}r.g))å{u INVALID MEMORY SIZE$!$ʡ~/w/wʔ|g*"z|?¸>@G!>0w#w!4~:60+4~u!N#F! x, # =!v"z!w6!u#+w+wz >ZxG}o|g"|! :m c p!"xp ~#c*|!:m ʅ xä SYNCRONIZATION ERROR$ {°~#o}oҼüÅ*zZ# :m m! ~ #* DM! x  w#!N#F! D!_>0w#w1!`4~:60+4*"e@u READY FOR "SYSGEN" OR "SAVE 34 CPM60.COM"$*|  CONSTRUCTING 60k CP/M vers 2.2$1͘A͌>>͌92^ :۷¥.!_~#fow]٭ڎڥ!v"!çREAD ERRORçNO FILE^:۷ ! ~ 3#0 Wx x ր ւ G ~ # 3x~#B!Y~ɯ2:۷=!۾ý:۷=!۾:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ ٯw4!Y~ʆ͌†t=ʆf ^ T ٯ2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yڸpsp2mÆÆf ͧÆFILE EXISTS _: É: :۷ʉ=2)ͽÉ T!@k!}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LO2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C :qn& ^#V>O^"*}:*)=":O:页o"*C *C!ͮ~2~2ͦ:2ͮ:O:w:w |g}o*鯆# O͐  :߷E B 2>: ߷b# : ߷y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! ߾ Hù H H $O͐: 2 *CN# x: 2 p&x~+é7ݯ2 H! >w_: ! ߾5ͤNkͱ¦ͱxʊ#Nx: ߷! ߖ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD# ^=>ͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q*ADCOMf^: !۶ Â$$$ SUB]ܙܥܫܱ"C{2!"E9"1A߯22!ty)K!G_^#V*Cސ~E ,&-AGMSߛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :߷E B 2>: ߷b# : ߷y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! ߾ Hù H H $O͐: 2 *CN# x: 2 p&x~+é7ݯ2 H! >w_: ! ߾5ͤNkͱ¦ͱxʊ#Nx: ߷! ߖ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#2E>! ^#V w#P:BO|^#V#"##"##"##"!i6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!B߾w!>2*C~=2u:B2~2wE:A*C߶w>"!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6:ʑw:2E**E}DQ>2óadjmrux}çìûpñns ns<nskLns{?      60k CP/M vers 2.2 1!21 ͻ}ͧͬ,I*lDMͻ:k:j>~ͻ>2!"2!"28!"9:O R![?boot  ç!:1CE900002180F80E02CD24F020572100EA060C0E03E5C5CD24F0C1E120471180A7 :1CE91C0000190C10F02180F8CD35EFAF3203003E003204002180F836001181F87F :1CE93800016606EDB021D90006060E81EDB306020E89EDB33E0C3295FF3E0132C4 :1CE954008CFFC300EA0445034105AA47043E3FCD0CF03E07CD0CF0C303F00000DE :1CE97000000000000000000000000000000000000D0A2E2E2E2E2043616C2D540B :1CE98C00657820436F6D7075746572732036304B2043502F4D2076657273696FF8 :1CE9A8006E20322E32202E2E2E2E0D0A2E2E2E2E2E2E2E2E2E2072656C6561730A :1CE9C4006520646174652031352D53657074656D6265722D3832202E2E2E2E2E1D :1CE9E0002E2E2E2E0D0A00900000000000000000000000000000000000000000BC :1CE9FC0000000000C36CEAC398EAC350EBC353EBC356EBC369EBC356EBC353EB82 :1CEA1800C387EBC333EAC38AEBC38FEBC394EBC346EAC359EAC35AEBC399EBEDE1 :1CEA34007396EA3196EADDE5CDA6EBDDE1ED7B96EAC9ED7396EA3196EADDE5CD73 :1CEA500014EDDDE1ED7B96EAC9ED7396EA3196EADDE5CD60EDDDE1ED7B96EAC95E :1CEA6C00000000000000000000000000000000000000000000000000000000008E :1CEA880000000000000000000000000018080000318000CD52EE2100FO*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C :qn& ^#V>O^"*}:*)=":O:页o"*C *C!ͮ~2~2ͦ:2ͮ:O:w:w |g}o*鯆# ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw**{#zr+s{ozg**͕** ,w͜͸Ͳ!!N#F$**O!~#:A߾#~$=2Ek͌::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | s-|N-# y2fyʒ>0G!h~ϰwi&))))3!jq!kq ~2koi`"l~Oj#!h~w !kw ?L:f>g yxzӉxӊY?28L28L8 >:fIyۉ:fV{ۋ:fcxۈ:ʑw:2E**E}DQ>2óadjmrux}çìûpñns ns<nskLns{?      60k CP/M vers 2.2 1!21 ͻ}ͧͬ,I*lDMͻ:k:j>~ͻ>2!"2!"28!"9:O R![?boot  ç!D22D3FE83 :1CEAA400AF32BFFE3C32BDFECDD1EB20682110FD7EFE1B3860FE2C3006463E2C11 :1CEAC000901803062CAF2100D4F5CDF8EAC10405C4F8EA2130EB06004E235E2371 :1CEADC005623EDB07EB720F43A0400E60FFE043801AF4F2100D47EFEC32022E9F4 :1CEAF8000E01E5C522C0FE7932BCFECD14EDC1E1200F118000190C10E93ABDFEC1 :1CEB14003C32BDFEC92122EBCD35EFC303F0202063616E6E6F7420626F6F740087 :1CEB3000030000C303EA030500C306DC033800C303F005D2E6000021000002C0D8 :1CEB4C00FE800000C306F0C309F079C30CF03E10D381DB81E60CFE0C3EFFC8AFD4 :1CEB6800C9CD5AEBB728FA79D380DB81CB47C8DB80CBBFFE13C0DB81CB4728FA95 :1CEB8400DB80C9010000ED43BDFEC921BCFE71C9ED43C0FEC960697AB328051994 :1CEBA0006E2600C923C921000079FE04D032BFFE3C016F002191FC093D20FC22D7 :1CEBBC00D3FECB43C0E5DDE1DDCB2346C0CD52EE3E0232BDFEAF32C2FE3E01D33D :1CEBD800C83ABFFE32C5FE4FCD1BF020143ABDFE32C3FE4FCD21F0200821D7FEDF :1CEBF400CD2AF02809CDE2EE28D7210000C921C0EC22D5FE3ADDFECB47CA6DEC5B :1CEC100021FFEC22D5FE214B00E53ADAFEE6033210ED26006F292901EFEC09118F :1CEC2C0011ED010300EDB03C473AD8FECB3F20047E1803S:2E!~Яw>T D^6k-äPYy 5*{zBK5ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# #  w ~>2!E5T*C!"C"C!w# F! w͌x2͢*C ~<wʃG:!ʎì 4~ʶ¬:<ʶ$ʶïZͻx>2>2ͻ:!Z2:E߷ẅ́͊Ͳ>2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:E߷͊:==»y==»*Ww#*"͸*:G#š"͸:!w4 iw:Z!E~=262*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄ8710FD3201EDD121002D :1CEC480000471910FD3A03ED47CB3CCB1D10FA2B2206ED3A04EDCB3FCB3FCB3F50 :1CEC640024252802CB3F3205ED2AD5FEED5BD3FED5D5D5010200EDB0EB010E00C4 :1CEC800009EB011300EDB0DDE12180F8DD7508DD7409E111100019DD750ADD7400 :1CEC9C000B11140019DD750CDD740DDD5E1BDD561C19DD750EDD740FE1AFC9235D :1CECB8001323131AAE2313C9D5EC1A00030700F2003F00C00010000200000080C8 :1CECD4000001070D1319050B111703090F1502080E141A060C1218040A101600C5 :1CECF000800034010001340300023C0700044000000000040F0000007F00C00040 :1CED0C002000020000000000DD2AD3FE3E0132D1FEDD7E1FB72009CD52EE3E010B :1CED2800CD8DEEC9CDFEED3AD0FEB72805CD52EE180B3ACFFEB72805CD37EE28E5 :1CED4400163ACEFE32C2FE2ABDFE22C3FE3ABFFE32C5FECD6AEEC0CD0CEEAFC9CD :1CED6000DD2AD3FEAF32D1FEDD7E1FB72008CD52EEAFCD8DEEC9CDFEEDAF32CF81 :1CED7C00FE79FE02282BFE01281C3ABCFE21CAFEBE20132ABDFEED5BCBFEB7ED06 :1CED980052200721CDFE7EB72022CD52EECD45EDC0CD7FEEC9CD52EEDD7E133207 :1CEDB400CDFE3ABCFE32CAFE2ABDFE22CBFE180A35CD37EE281ACD7FEEC03ACE2D :1CEDD000FE32C2FE2ABDFE22C3FE3ABFFE3000000000000000000000000000000000000000000000000000DB :1CF1340000000000000000000000000000000000000000000000000000000000BF :1CF1500000000000000000000000000000000000000000000000000000000000A3 :1CF16C000000000000000000000000000000000000000000000000000000000087 :1CF18800000000000000000000000000000000000000000000000000000000006B :1CF1A400000000000000000000000000000000000000000000000000000000004F :1CF1C0000000000000000000000000000000000000000000000000000000000033 :1CF1DC000000000000000000000000000000000000000000000000000000000017 :1CF1F80000000000000000000000000000000000000000000000000000000000FB :1CF2140000000000000000000000000000000000000000000000000000000000DE :1CF2300000000000000000000000000000000000000000000000000000000000C2 :1CF24C0000000000000000000000000000000000000000000000000000000000A6 :1CF26800000000000000000000000000000000000000000000000000000000008A :1CF28400000000000000000000000000000000000000000000000000000000006E :1CF2A0000000000000000000000000000000000000000000000000000000000052 :1C00000000000000007 :1CF6040000000000000000000000000000000000000000000000000000000000EA :1CF6200000000000000000000000000000000000000000000000000000000000CE :1CF63C0000000000000000000000000000000000000000000000000000000000B2 :1CF658000000000000000000000000000000000000000000000000000000000096 :1CF67400000000000000000000000000000000000000000000000000000000007A :1CF69000000000000000000000000000000000000000000000000000000000005E :1CF6AC000000000000000000000000000000000000000000000000000000000042 :1CF6C8000000000000000000000000000000000000000000000000000000000026 :1CF6E400000000000000000000000000000000000000000000000000000000000A :1CF7000000000000000000000000000000000000000000000000000000000000ED :1CF71C0000000000000000000000000000000000000000000000000000000000D1 :1CF7380000000000000000000000000000000000000000000000000000000000B5 :1CF754000000000000000000000000000000000000000000000000000000000099 :1CF77000000000000000000000000000000000000000000000000000000000007D :1CF78C000000000000000000000000000000002C5FEDD22C8FECD0CEE21CAFE347E5C :1CEDEC00DDBE10380B280936012ACBFE2322CBFEAFC9473ABCFE3DCB3F10FC3C72 :1CEE080032CEFEC93ABCFE3DDDA62026006F292929292929290100F909ED5BC094 :1CEE2400FE3AD1FEB720063E0132D0FEEB018000EDB0C93ACEFE21C2FEBEC02A4E :1CEE4000BDFEED5BC3FEB7ED52C03ABFFE21C5FEBEC9AF32CFFE32CDFE3AD0FE27 :1CEE5C00B7C8DDE5DD2AC8FECD7FEEDDE1C92100F922C6FE3E0132CFFECD98EE3A :1CEE7800C821CFFE3600C92100F922C6FEAF32D0FECD98EEC921BCFE11C2FE0151 :1CEE94000600EDB032D2FE3AC5FE4FCD1BF02806CDE2EE28F2C906013AC3FEFEEB :1CEEB0004D38040609D64D4F78D3C8CD21F02806CDE2EE28E5C92AC6FE3AC2FEC2 :1CEECC004F3AD2FEB72805CD24F01803CD27F0C8CDE2EE28E5C95F3AC5FEC6416F :1CEEE800326FEF215FEFCD35EF01FF087B173807F5AFEDB1F110F6CD35EF7BE6BA :1CEF0400C0201921B8EFCD35EF3AC3FECD3FEFCD35EF3AC2FECD3FEF3E01B7C9A4 :1CEF200021CBEFCD35EFCD09EAFE032802AFC9AF3204003CC97E23B7C84FCD0C74 :1CEF3C00EA18F60664CD50EF060ACD50EFF6304FCD0CEAC90EFF0C9030FC80F5E4 :1CEF580079B7C449EFF1C90D0A42494F53206572726F72206F6E20413A20200051 :1CEF74006E6F742072656164F2BC000000000000000000000000000000000000000000000000000000000036 :1CF2D800000000000000000000000000000000000000000000000000000000001A :1CF2F40000000000000000000000000000000000000000000000000000000000FE :1CF3100000000000000000000000000000000000000000000000000000000000E1 :1CF32C0000000000000000000000000000000000000000000000000000000000C5 :1CF3480000000000000000000000000000000000000000000000000000000000A9 :1CF36400000000000000000000000000000000000000000000000000000000008D :1CF380000000000000000000000000000000000000000000000000000000000071 :1CF39C000000000000000000000000000000000000000000000000000000000055 :1CF3B8000000000000000000000000000000000000000000000000000000000039 :1CF3D400000000000000000000000000000000000000000000000000000000001D :1CF3F0000000000000000000000000000000000000000000000000000000000001 :1CF40C0000000000000000000000000000000000000000000000000000000000E4 :1CF4280000000000000000000000000000000000000000000000000000000000C8 :1CF4440000000000000000000000000000000000000000000000000000000000000000000000000000000061 :1CF7A8000000000000000000000000000000000000000000000000000000000045 :1CF7C4000000000000000000000000000000000000000000000000000000000029 :1CF7E000000000000000000000000000000000000000000000000000000000000D :1CF7FC0000000000000000000000000000000000000000000000000000000000F1 :1CF8180000000000000000000000000000000000000000000000000000000000D4 :1CF8340000000000000000000000000000000000000000000000000000000000B8 :1CF85000000000000000000000000000000000000000000000000000000000009C :1CF86C000000000000000000000000000000000000000000000000000000000080 :1CF888000000000000000000000000000000000000000000000000000000000064 :1CF8A4000000000000000000000000000000000000000000000000000000000048 :1CF8C000000000000000000000000000000000000000000000000000000000002C :1CF8DC000000000000000000000000000000000000000000000000000000000010 :1CF8F80000000000000000000000000000000000000000000000000000000000F4 :1CF9140000000000000000000000000000000000000000000000000000000000D7 :1CF93000000000000000000000079007772742070726F746563740077727420666139 :1CEF9000756C74006E6F7420666F756E640062616420637263006F766572727561 :1CEFAC006E00647271006275737900002020747261636B20002020736563746FFE :1CEFC800722000203F080020000000000000000000000000000000000000000014 :1CEFE4000000000000000000000000000000000000000000000000000000000011 :1CF0000000000000000000000000000000000000000000000000000000000000F4 :1CF01C0000000000000000000000000000000000000000000000000000000000D8 :1CF0380000000000000000000000000000000000000000000000000000000000BC :1CF0540000000000000000000000000000000000000000000000000000000000A0 :1CF070000000000000000000000000000000000000000000000000000000000084 :1CF08C000000000000000000000000000000000000000000000000000000000068 :1CF0A800000000000000000000000000000000000000000000000000000000004C :1CF0C4000000000000000000000000000000000000000000000000000000000030 :1CF0E0000000000000000000000000000000000000000000000000000000000014 :1CF0FC0000000000000000000000000000000000000000000000000000000000F8 :1CF11800000000000AC :1CF460000000000000000000000000000000000000000000000000000000000090 :1CF47C000000000000000000000000000000000000000000000000000000000074 :1CF498000000000000000000000000000000000000000000000000000000000058 :1CF4B400000000000000000000000000000000000000000000000000000000003C :1CF4D0000000000000000000000000000000000000000000000000000000000020 :1CF4EC000000000000000000000000000000000000000000000000000000000004 :1CF5080000000000000000000000000000000000000000000000000000000000E7 :1CF5240000000000000000000000000000000000000000000000000000000000CB :1CF5400000000000000000000000000000000000000000000000000000000000AF :1CF55C000000000000000000000000000000000000000000000000000000000093 :1CF578000000000000000000000000000000000000000000000000000000000077 :1CF59400000000000000000000000000000000000000000000000000000000005B :1CF5B000000000000000000000000000000000000000000000000000000000003F :1CF5CC000000000000000000000000000000000000000000000000000000000023 :1CF5E800000000000000000000000000000000000000000000000000000000000000000000000000000000BB :1CF94C00000000000000000000000000000000000000000000000000000000009F :1CF968000000000000000000000000000000000000000000000000000000000083 :1CF984000000000000000000000000000000000000000000000000000000000067 :1CF9A000000000000000000000000000000000000000000000000000000000004B :1CF9BC00000000000000000000000000000000000000000000000000000000002F :1CF9D8000000000000000000000000000000000000000000000000000000000013 :1CF9F40000000000000000000000000000000000000000000000000000000000F7 :1CFA100000000000000000000000000000000000000000000000000000000000DA :1CFA2C0000000000000000000000000000000000000000000000000000000000BE :1CFA480000000000000000000000000000000000000000000000000000000000A2 :1CFA64000000000000000000000000000000000000000000000000000000000086 :1CFA8000000000000000000000000000000000000000000000000000000000006A :1CFA9C00000000000000000000000000000000000000000000000000000000004E :1CFAB8000000000000000000000000000000000000000000000000000000000032 :1CFAD400000000000E6 :1CFE1C0000000000000000000000000000000000000000000000000000000000CA :1CFE380000000000000000000000000000000000000000000000000000000000AE :1CFE54000000000000000000000000000000000000000000000000000000000092 :1CFE70000000000000000000000000000000000000000000000000000000000076 :1CFE8C00000000000000000000000000000000000000000000000000000000005A :1CFEA800000000000000000000000000000000000000000000000000000000003E :1CFEC4000000000000000000000000000000000000000000000000000000000022 :1CFEE0000000000000000000000000000000000000000000000000000000000006 :1CFEFC0000000000000000000000000000000000000000000000000000000000EA :1CFF180000000000000000000000000000000000000000000000000000000000CD :1CFF340000000000000000000000000000000000000000000000000000000000B1 :1CFF50000000000000000000000000000000000000000000000000000000000095 :1CFF6C000000000000000000000000000000000000000000000000000000000079 :1CFF8800000000000000000000000000000000000000000000000000000000005D :01FFA400005C :00000001FF 000000000000000000000000>GӉ>Ӊ!m6#6>Ӂ>Ӂ! 6K#6> >!K2>2!6E!> 2>2EAG>? >  SERIAL.COM$ O > >!K2>2!6E!> 2>2EAG>? > STAT COM)SYSGEN COMDUMP COMDUMP ASM! BIOS ASM`!"#$%&CBIOS ASME'()*+DEBLOCK ASMP,-./0DISKDEF LIB11234BB2FORMTCOM35678BB2CPM60COMD9:;<=CPM60 COMD>?@ABSS60EA HEXpCDEFGHISYSGEN8 COMJSERIAL COMSERIOUT ASMKBIOS DOC"UVWMELDING DOC"XYZSS60E8 HEXz[\]^_`abSERIOUT $$$00000000000000000000000000000000000000000000000016 :1CFAF00000000000000000000000000000000000000000000000000000000000FA :1CFB0C0000000000000000000000000000000000000000000000000000000000DD :1CFB280000000000000000000000000000000000000000000000000000000000C1 :1CFB440000000000000000000000000000000000000000000000000000000000A5 :1CFB60000000000000000000000000000000000000000000000000000000000089 :1CFB7C00000000000000000000000000000000000000000000000000000000006D :1CFB98000000000000000000000000000000000000000000000000000000000051 :1CFBB4000000000000000000000000000000000000000000000000000000000035 :1CFBD0000000000000000000000000000000000000000000000000000000000019 :1CFBEC0000000000000000000000000000000000000000000000000000000000FD :1CFC080000000000000000000000000000000000000000000000000000000000E0 :1CFC240000000000000000000000000000000000000000000000000000000000C4 :1CFC400000000000000000000000000000000000000000000000000000000000A8 :1CFC5C00000000000000000000000000000000000000000000000000000000008C :1CFC701"6 --- Cal-Tex Computers Sysgen Version 1.0 --- 6 Source drive name or to skip ........ 8 (>2! "!"FQ 6 Destination drive name or to skip ... 8 (>2! "! "FQ 6 press to repeat or any other key to exit ...  ʻ6 *** ERROR ON :A O! ~#fo<6 *** press to retry or any other key to abort ...  >: NOT READY: SEEK ERROR: BAD SECTOR: VERIFY ERROR  `8 A?2A 76 <~# :O>2O!>!*>:? :O! ~G!:()= *:w#p#s#r#6"*͵">:<8:($' ɷ>:<8:($' ɷ8000000000000000000000000000000000000000000000000000000000070 :1CFC94000000000000000000000000000000000000000000000000000000000054 :1CFCB0000000000000000000000000000000000000000000000000000000000038 :1CFCCC00000000000000000000000000000000000000000000000000000000001C :1CFCE8000000000000000000000000000000000000000000000000000000000000 :1CFD040000000000000000000000000000000000000000000000000000000000E3 :1CFD200000000000000000000000000000000000000000000000000000000000C7 :1CFD3C0000000000000000000000000000000000000000000000000000000000AB :1CFD5800000000000000000000000000000000000000000000000000000000008F :1CFD74000000000000000000000000000000000000000000000000000000000073 :1CFD90000000000000000000000000000000000000000000000000000000000057 :1CFDAC00000000000000000000000000000000000000000000000000000000003B :1CFDC800000000000000000000000000000000000000000000000000000000001F :1CFDE4000000000000000000000000000000000000000000000000000000000003 :1CFE00000000000000000000000000000000000000000000000000000000000!$ W! $ G !52>2!6f!> 2>2EAG>? >  .... Cal-Tex Computers 60K CP/M version 2.2 .... ........ release date 15-September-82 .......... lØPSViVSÇ3ÊÏÔFYZÙs1ͦ{s1{s1`{1R!"2<2 h!~8`,0F>,,!!0N#^#V#~ :8O!~ ""y2  :<2!"5 cannot boot8! y >Ӂہ >ȯZ(yӀہGۀ˿ہG(ۀC!qC`iz(n&#!y2<o! = "C#FR>22>:2O :2O! !*( (!!":Gm!"!K:2&o))  ͒> Ò> Ò͘~#͌ì _2<ԯ2 Շ!۶2:2a{_:۷ʖ:۷>Ľʖ:=2–!B!6#5ʖ:۷Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ "ַ"͌#>?͌͘ =_.:;<> Oօo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" 2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C :qn& ^#V>O^"*}:*)=":O:页o"*C *C!ͮ~2~2ͦ:2ͮ:O:w:w |g}o*鯆# O͐  :߷E B 2>: ߷b# : ߷y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! ߾ Hù H H $O͐: 2 *CN# x: 2 p&x~+é7ݯ2 H! >w_: ! ߾5ͤNkͱ¦ͱxʊ#Nx: ߷! ߖ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD# *>2~ R>͍:(R :(7(:2*":2j *2~ R͍2y(+(:! *[R !~ "RER~2:2*" 57(:2*":2" !4~ݾ8 ( 6*#"G:=?<2:=ݦ &o))))))) [: >2:!*[R:!ɯ22:*!">2͘!6!"2͘!2:O((:M8 MOx!((*:O:($'(_:A2o!_5{85{ !5:?5:?>!5 (ɯ2<~#O dP P0O  0yI BIOS error on A: not readywrt protectwrt faultnot foundbad crcoverrundrqbusy track sector ?#~?  xDIR ERA TYPESAVEREN USER]!yO#< Ty#O 3ׯ21y_͸2y2ͽ:Է˜1͘A͌>>͌92^ :۷¥.!_~#fow]٭ڎڥ!v"!çREAD ERRORçNO FILE^:۷ ! ~ 3#0 Wx x ր ւ G ~ # 3x~#B!Y~ɯ2:۷=!۾ý:۷=!۾:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ ٯw4!Y~ʆ͌†t=ʆf ^ T ٯ2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yڸpsp2mÆÆf ͧÆFILE EXISTS _: É: :۷ʉ=2)ͽÉ T!@k!}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: !۶ Â$$$ SUB]ܙܥܫܱ"C{2!"E9"1A߯22!ty)K!G_^#V*Cސ~E ,&-AGMSߛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :߷E B 2>: ߷b# : ߷y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! ߾ Hù H H $O͐: 2 *CN# x: 2 p&x~+é7ݯ2 H! >w_: ! ߾5ͤNkͱ¦ͱxʊ#Nx: ߷! ߖ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD# *>2~ R>͍:(R :(7(:2*":2j *2~ R͍2y(+(:! *[R !~ "RER~2:2*" 57(:2*":2" !4~ݾ8 ( 6*#"G:=?<2:=ݦ &o))))))) [: >2:!*[R:!ɯ22:*!">2͘!6!"2͘!2:O((:M8 MOx!((*:O:($'(_:A2o!_5{85{ !5:?5:?>!5 (ɯ2<~#O dP P0O  0yI BIOS error on A: not readywrt protectwrt faultnot foundbad crcoverrundrqbusy track sector ?#~?  xDIR ERA TYPESAVEREN USER]!yO#< Ty#O 3ׯ21y_͸2y2ͽ:Է˜1͘A͌>>͌92^ :۷¥.!_~#fow]٭ڎڥ!v"!çREAD ERRORçNO FILE^:۷ ! ~ 3#0 Wx x ր ւ G ~ # 3x~#B!Y~ɯ2:۷=!۾ý:۷=!۾:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ ٯw4!Y~ʆ͌†t=ʆf ^ T ٯ2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yڸpsp2mÆÆf ͧÆFILE EXISTS _: É: :۷ʉ=2)ͽÉ T!@k!}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: !۶ Â$$$ SUB]ܙܥܫܱ"C{2!"E9"1A߯22!ty)K!G_^#V*Cސ~E ,&-AGMSߛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :߷E B 2>: ߷b# : ߷y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! ߾ Hù H H $O͐: 2 *CN# x: 2 p&x~+é7ݯ2 H! >w_: ! ߾5ͤNkͱ¦ͱxʊ#Nx: ߷! ߖ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#!$ W! $ G !52>2!6f!> 2>2EAG>? >  .... Cal-Tex Computers 60K CP/M version 2.2 .... ........ release date 15-September-82 .......... lØPSViVSÇ3ÊÏÔFYZÙs1ͦ{s1{s1`{1R!"2<2 h!~8`,0F>,,!!0N#^#V#~ :8O!~ ""y2  :<2!"5 cannot boot8! y >Ӂہ >ȯZ(yӀہGۀ˿ہG(ۀC!qC`iz(n&#!y2<o! = "C#FR>22>:2O :2O! !*( (!!":Gm!"!K:2&o))  ͒> Ò> Ò͘~#͌ì _2<ԯ2 Շ!۶2:2a{_:۷ʖ:۷>Ľʖ:=2–!B!6#5ʖ:۷Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ "ַ"͌#>?͌͘ =_.:;<> Oօo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" 2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C :qn& ^#V>O^"*}:*)=":O:页o"*C *C!ͮ~2~2ͦ:2ͮ:O:w:w |g}o*鯆# ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw**{#zr+s{ozg**͕** ,w͜͸Ͳ!!N#F$**O!~#:A߾#~$=2Ek͌tomatically by boot. WINCH .... set to 1 to enable XEBEC drivers to be assembled in with bios. Resuting code is > 1500 bytes long, so requires 59k memsize to run. NFLOPPY .. number of floppys in system. set to 1 or 2 for hard disk systems or you will not have enough memory for the disk allocation vectors in most cases. DOUBLE ... set to ture to enable double sided floppies. allocates blocks on other side of disk and doubles directory size DIRSIZ ... number of directory entries allocated. we may want to change this for compatibility with other systems. BLS ...... CP/M block size parameter (expressed in Kbytes). this should probably not be changed from the 2K value now being used, but we have it just in case. FIVE EIGHT .... floppy disk type being used. LSTDAT LSTCTL LSTBAUD .. sio ports and ctc chanel for serial printer driver. set to 80h/81h/89h for side A or 82h/83h/88h for side B. The one sector loader contains a short tab2BFF ... t1/s1 to nn CCP and BDOS portion of CP/M (5.5 Kbytes) 44 sectors if 128 bytes/sector 22 " " 256 " " 11 " " 512 " " 6 " " 1024 " " CPM.COM' after running MOVCPM or standard version of SYSGEN} #M980,1F7F,4000 #F100,3FFF,0 #IAUTOBIOS.HEX #R2000 {if 59k MSIZE then use 2400 here} #M4000,55FF,1600 You now have a picture of the reserved tracks as required by our SYSGEN parked in memory from locations 900h to 2BFFh. You can save this on a file if desired, and then run SYSGEN (our version) to put the system on the reserved tracks of a formatted DD disk. The memory layout for the system tracks in SYSGEN is as follows; address sector ------ ------ 900-97f ... t0/s1 one sector loader for CP/M cold boot 980-9ff ... t0/s2 signon message A00-15FF ... t0/s3 to 26 BIOS code (1.5 to 2.5 Kbytes) 1600-::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | s-|N-# S:2E!~Яw>T D^6k-äPYy 5*{zBK5ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# #  w ~>2!E5T*C!"C"C!w# F! w͌x2͢*C ~<wʃG:!ʎì 4~ʶ¬:<ʶ$ʶïZͻx>2>2ͻ:!Z2:E߷ẅ́͊Ͳ>2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:E߷͊:==»y==»*Ww#*"͸*:G#š"͸:!w4 iw:Z!E~=26le of constants for sio initialization of write reg #4,#3,#5 and the ctc. Edit this table to change parity, baudrate etc. We may want to make a fancier way to define these parameters, but this will do for a while. XONXOFF .. set to TRUE to enable this protocol in printer driver. TXMASK ... set to bits to be tested for printer-ready in list routine. possible bits are CTS/SYNC/DCD/TBE. (always test TBE, others are optional depending on printer) A new module called 'MEMDEF' has been added to the CBIOS. This is simply a copy of the monitor rom variables declaration file with the variables defined using EQU's instead of DEFS's. The main use of MEMDEF is to allow us make symbolic references to the system vars in the CBIOS cold start initialization. Use this trick to do things like changing the disk step rate, motor turn-off delay, keyboard fifo size, disk spin-up delay and goodies like that. SYSGEN: Type the following magic incantations after yo .... Notes on BIOS/DDINIT/SYSGEN versions released 26-August-82 ... BIOS: This BIOS release should represent what we will be calling a 'distribution' version of the source code for the BIOS. It has been cleaned up so that most mere mortals should be able to assemble it and produce a working system without having to do any patches or funny stuff. The main module 'AUTOBIOS.MAC' has includes for all the other files such as the boot loader, signon message, deblock routines, hard disk driver and system variables EQU's. The following items are the main ones people will be interested in; MSIZE .... memory size in Kbytes. use 60k for floppy-only systems and 59k for hard disk versions. USRDRV ... user number (high nybble) and drive number (low nybble) to log-on after cold start. use 00h unless you are strange. SERIAL ... set to TRUE to cause CONIN to use serial input port and CONOUT to use built-in crt. Same trick as Bigboard PFM rom's 'S' command, but gets done auu have edited your desired changes in the bios or the equates shown above. A>M80 =AUTOBIOS A>L80 */P:E900 {if 59k MSIZE then use E500 here} *AUTOBIOS *AUTOBIOS/X/N/E #ZSID CPM.COM {assumes you created file by saying 'SAVE 34 CPM.COM' after running MOVCPM or standard version of SYSGEN} #M980,1F7F,4000 #F100,3FFF,0 #IAUTOBIOS.HEX #R2000 {if 59k MSIZE then use 2400 here} #M4000,55FF,1600 You now have a picture of the reserved tracks as required by our SYSGEN parked in memory from locations 900h to 2BFFh. You can save this on a file if desired, and then run SYSGEN (our version) to put the system on the reserved tracks of a formatted DD disk. The memory layout for the system tracks in SYSGEN is as follows; address sector ------ ------ 900-97f ... t0/s1 one sector loader for CP/M cold boot 980-9ff ... t0/s2 signon message A00-15FF ... t0/s3 to 26 BIOS code (1.5 to 2.5 Kbytes) 1600- Th diskett yo hav receive i single-density I contain sourc an he file fo th CBIO fo th Cal-Te "Bi Boar II i si guises Tw fo 60 CP/ syste wit a man a fou single-side 8 floppies tw fo 60 syste wit a man a tw double-side 8 floppies an tw fo 59ˠ CP/͠ syste wit a man a tw 8 floppie an singl 5.25 har disk Th firs pai ar name SS60E an SS60E8 th secon DS60E am DS60E8 an th thir SW59E an SW59E4 Ther ar pair o file becaus th MOVCP͠ utilit include wit CP/͠ distribute b Digita Research Computer o Garlan Texa require cod locate 20 he byte lowe tha normal To create a system disk for your "Big Board II": 1 Provid yoursel wit severa double-densit diskette wit single-densit trac zeroe b purchas o b2200 FOR "60E8" FILES, 2400 FOR "59E6" FILES, AND 2600 FOR "59E4" FILES. #M4000,55FF,160 ;move the ccp & bdos back down 4) Exit from DDT, SID, or ZSID by typing -C. You may wish to SAVŠ thi "Bi Boar II CP/ i a appropriatel name fil for for possible use later. 5 Ru th system-copying utility named SYSGEN include o th CBIOS distribution diskette and follow the instructions that appear on the screen. Be certain any diskette you write the system to is a double density one with a single density track zero. **************************************************************** 900-97f ... t0/s1 one-sector boot 980-9ff ... t0/s2 signon message A00-15FF ... t0/s3 to 26 BIOS code (1.5 to 2.5 Kbytes) 1600-2BFF ... t1/s1 :1CE700002180F80E02CD24F020572100E8060C0E03E5C5CD24F0C1E120471180AB :1CE71C0000190C10F02180F8CD35EDAF3203003E003204002180F836001181F883 :1CE73800016606EDB021D90006060E81EDB306020E89EDB33E0C3295FF3E0132C6 :1CE754008CFFC300E80445034105AA47043E3FCD0CF03E07CD0CF0C303F00000E2 :1CE77000000000000000000000000000000000000D0A2E2E2E2E2043616C2D540D :1CE78C00657820436F6D7075746572732036304B2043502F4D2076657273696FFA :1CE7A8006E20322E32202E2E2E2E0D0A2E2E2E2E2E2E2E2E2072656C65617365D5 :1CE7C40020646174652031352D53657074656D6265722D3832202E2E2E2E2E2E56 :1CE7E0002E2E2E2E0D0A00900000000000000000000000000000000000000000BE :1CE7FC0000000000C36CE8C398E8C350E9C353E9C356E9C369E9C356E9C353E994 :1CE81800C387E9C333E8C38AE9C38FE9C394E9C346E8C359E8C35AE9C399E9EDF5 :1CE834007396E83196E8DDE5CDA6E9DDE1ED7B96E8C9ED7396E83196E8DDE5CD81 :1CE8500014EBDDE1ED7B96E8C9ED7396E83196E8DDE5CD60EBDDE1ED7B96E8C96C :1CE86C000000000000000000000000000000000000000000000000000000000090 :1CE8880000000000000000000000000018080000318000CD52EC2100F bootin CP/ fo th origina "Bi Board on you "Bi Boar II an runnin th formattin progra name BB2FORMT.CO include o th diskett yo hav received Us ske o fo single-densit diskettes ske o fo double-densit ones Whil formattin diskette th progra wil displa on o th followin symbol pe track: '.' means the track was formatted without verification '+' means the track was formatted and verified as correct '1' means the drivve became not ready '2' means a sector was read with a bad crc '3' means a sector could not be found '?' means a seek error 2 Creat .CO fil containin 59 o 60 versio o you ow copy of CP/M by: A) Running MOVCPM as described on pages 30 and 31 of the Digital Research manual titled "An Introduction tto nn CCP and BDOS portion of CP/M (5.5 Kbytes) 44 sectors if 128 bytes/sector 22 " " 256 " " 11 " " 512 " " 6 " " 1024 " " T, SID, or ZSID by typing -C. You may wish to SAVŠ thi "Bi Boar II CP/ i a appropriatel name fil for for possible use later. 5 Ru th system-copying utility named SYSGEN include o th CBIOS distribution diskette and follow the instructions that appear on the screen. Be certain any diskette you write the system to is a double density one with a single density track zero. **************************************************************** 900-97f ... t0/s1 one-sector boot 980-9ff ... t0/s2 signon message A00-15FF ... t0/s3 to 26 BIOS code (1.5 to 2.5 Kbytes) 1600-2BFF ... t1/s1 D22D3FE87 :1CE8A400AF32BFFE3C32BDFECDD1E920682110FD7EFE1B3860FE2C3006463E2C15 :1CE8C000901803062CAF2100D2F5CDF8E8C10405C4F8E82130E906004E235E237B :1CE8DC005623EDB07EB720F43A0400E60FFE043801AF4F2100D27EFEC32022E9F8 :1CE8F8000E01E5C522C0FE7932BCFECD14EBC1E1200F118000190C10E93ABDFEC5 :1CE914003C32BDFEC92122E9CD35EDC303F0202063616E6E6F7420626F6F74008D :1CE93000030000C303E8030500C306DA033800C303F005D2E4000021000002C0E0 :1CE94C00FE800000C306F0C309F079C30CF03E10D381DB81E60CFE0C3EFFC8AFD6 :1CE96800C9CD5AE9B728FA79D380DB81CB47C8DB80CBBFFE13C0DB81CB4728FA99 :1CE98400DB80C9010000ED43BDFEC921BCFE71C9ED43C0FEC960697AB328051996 :1CE9A0006E2600C923C921000079FE04D032BFFE3C016F002191FC093D20FC22D9 :1CE9BC00D3FECB43C0E5DDE1DDCB2346C0CD52EC3E0232BDFEAF32C2FE3E01D341 :1CE9D800C83ABFFE32C5FE4FCD1BF020143ABDFE32C3FE4FCD21F0200821D7FEE1 :1CE9F400CD2AF02809CDE2EC28D7210000C921C0EA22D5FE3ADDFECB47CA6DEA63 :1CEA100021FFEA22D5FE214B00E53ADAFEE6033210EB26006F292901EFEA091197 :1CEA2C0011EB010300EDB03C473AD8FECB3F20047E1803o CP/M Features and Facilities." The copy of MOVCPM used must be the one that came with the operating system on the distribution diskette though it may have had patches made to it. BExitin fro MOVCP an SAVEin th syste. We recom- mend the names "CPM59K.COM" and "CPM60K.COM". Do not give the files names that imply they are specifically for "Big Board II" for they do not contain our CBIOS. 3) Use DDT, SID, or ZSID to load your CP/M and the appropriate .HEX file of our CBIOS as follows: A>ddt cpm60k.com ;load the cp/m.com file at 0980 #M980,1F7F,4000 ;move the ccp & bdos to 4000 #F100,3FFF,0 ;zero RAM from 0100 up to 4000 #Iss60ea.HEX ;load our boot & cbios at 0900 #R2000 ;USE 2000 FOR "60EA" FILES, 8710FD3201EBD1210033 :1CEA480000471910FD3A03EB47CB3CCB1D10FA2B2206EB3A04EBCB3FCB3FCB3F58 :1CEA640024252802CB3F3205EB2AD5FEED5BD3FED5D5D5010200EDB0EB010E00C8 :1CEA800009EB011300EDB0DDE12180F8DD7508DD7409E111100019DD750ADD7402 :1CEA9C000B11140019DD750CDD740DDD5E1BDD561C19DD750EDD740FE1AFC9235F :1CEAB8001323131AAE2313C9D5EA1A00030700F2003F00C00010000200000080CC :1CEAD4000001070D1319050B111703090F1502080E141A060C1218040A101600C7 :1CEAF000800034010001340300023C0700044000000000040F0000007F00C00042 :1CEB0C002000020000000000DD2AD3FE3E0132D1FEDD7E1FB72009CD52EC3E010F :1CEB2800CD8DECC9CDFEEB3AD0FEB72805CD52EC180B3ACFFEB72805CD37EC28EF :1CEB4400163ACEFE32C2FE2ABDFE22C3FE3ABFFE32C5FECD6AECC0CD0CECAFC9D3 :1CEB6000DD2AD3FEAF32D1FEDD7E1FB72008CD52ECAFCD8DECC9CDFEEBAF32CF89 :1CEB7C00FE79FE02282BFE01281C3ABCFE21CAFEBE20132ABDFEED5BCBFEB7ED08 :1CEB980052200721CDFE7EB72022CD52ECCD45EBC0CD7FECC9CD52ECDD7E133211 :1CEBB400CDFE3ABCFE32CAFE2ABDFE22CBFE180A35CD37EC281ACD7FECC03ACE33 :1CEBD000FE32C2FE2ABDFE22C3FE3ABFFE3000000000000000000000000000000000000000000000000000DD :1CEF340000000000000000000000000000000000000000000000000000000000C1 :1CEF500000000000000000000000000000000000000000000000000000000000A5 :1CEF6C000000000000000000000000000000000000000000000000000000000089 :1CEF8800000000000000000000000000000000000000000000000000000000006D :1CEFA4000000000000000000000000000000000000000000000000000000000051 :1CEFC0000000000000000000000000000000000000000000000000000000000035 :1CEFDC000000000000000000000000000000000000000000000000000000000019 :1CEFF80000000000000000000000000000000000000000000000000000000000FD :1CF0140000000000000000000000000000000000000000000000000000000000E0 :1CF0300000000000000000000000000000000000000000000000000000000000C4 :1CF04C0000000000000000000000000000000000000000000000000000000000A8 :1CF06800000000000000000000000000000000000000000000000000000000008C :1CF084000000000000000000000000000000000000000000000000000000000070 :1CF0A0000000000000000000000000000000000000000000000000000000000054 :1C00000000000000009 :1CF4040000000000000000000000000000000000000000000000000000000000EC :1CF4200000000000000000000000000000000000000000000000000000000000D0 :1CF43C0000000000000000000000000000000000000000000000000000000000B4 :1CF458000000000000000000000000000000000000000000000000000000000098 :1CF47400000000000000000000000000000000000000000000000000000000007C :1CF490000000000000000000000000000000000000000000000000000000000060 :1CF4AC000000000000000000000000000000000000000000000000000000000044 :1CF4C8000000000000000000000000000000000000000000000000000000000028 :1CF4E400000000000000000000000000000000000000000000000000000000000C :1CF5000000000000000000000000000000000000000000000000000000000000EF :1CF51C0000000000000000000000000000000000000000000000000000000000D3 :1CF5380000000000000000000000000000000000000000000000000000000000B7 :1CF55400000000000000000000000000000000000000000000000000000000009B :1CF57000000000000000000000000000000000000000000000000000000000007F :1CF58C000000000000000000000000000000002C5FEDD22C8FECD0CEC21CAFE347E60 :1CEBEC00DDBE10380B280936012ACBFE2322CBFEAFC9473ABCFE3DCB3F10FC3C74 :1CEC080032CEFEC93ABCFE3DDDA62026006F292929292929290100F909ED5BC096 :1CEC2400FE3AD1FEB720063E0132D0FEEB018000EDB0C93ACEFE21C2FEBEC02A50 :1CEC4000BDFEED5BC3FEB7ED52C03ABFFE21C5FEBEC9AF32CFFE32CDFE3AD0FE29 :1CEC5C00B7C8DDE5DD2AC8FECD7FECDDE1C92100F922C6FE3E0132CFFECD98EC40 :1CEC7800C821CFFE3600C92100F922C6FEAF32D0FECD98ECC921BCFE11C2FE0155 :1CEC94000600EDB032D2FE3AC5FE4FCD1BF02806CDE2EC28F2C906013AC3FEFEEF :1CECB0004D38040609D64D4F78D3C8CD21F02806CDE2EC28E5C92AC6FE3AC2FEC6 :1CECCC004F3AD2FEB72805CD24F01803CD27F0C8CDE2EC28E5C95F3AC5FEC64173 :1CECE800326FED215FEDCD35ED01FF087B173807F5AFEDB1F110F6CD35ED7BE6C4 :1CED0400C0201921B8EDCD35ED3AC3FECD3FEDCD35ED3AC2FECD3FED3E01B7C9B0 :1CED200021CBEDCD35EDCD09E8FE032802AFC9AF3204003CC97E23B7C84FCD0C7C :1CED3C00E818F60664CD50ED060ACD50EDF6304FCD0CE8C90EFF0C9030FC80F5EE :1CED580079B7C449EDF1C90D0A42494F53206572726F72206F6E20413A20200055 :1CED74006E6F742072656164F0BC000000000000000000000000000000000000000000000000000000000038 :1CF0D800000000000000000000000000000000000000000000000000000000001C :1CF0F4000000000000000000000000000000000000000000000000000000000000 :1CF1100000000000000000000000000000000000000000000000000000000000E3 :1CF12C0000000000000000000000000000000000000000000000000000000000C7 :1CF1480000000000000000000000000000000000000000000000000000000000AB :1CF16400000000000000000000000000000000000000000000000000000000008F :1CF180000000000000000000000000000000000000000000000000000000000073 :1CF19C000000000000000000000000000000000000000000000000000000000057 :1CF1B800000000000000000000000000000000000000000000000000000000003B :1CF1D400000000000000000000000000000000000000000000000000000000001F :1CF1F0000000000000000000000000000000000000000000000000000000000003 :1CF20C0000000000000000000000000000000000000000000000000000000000E6 :1CF2280000000000000000000000000000000000000000000000000000000000CA :1CF2440000000000000000000000000000000000000000000000000000000000000000000000000000000063 :1CF5A8000000000000000000000000000000000000000000000000000000000047 :1CF5C400000000000000000000000000000000000000000000000000000000002B :1CF5E000000000000000000000000000000000000000000000000000000000000F :1CF5FC0000000000000000000000000000000000000000000000000000000000F3 :1CF6180000000000000000000000000000000000000000000000000000000000D6 :1CF6340000000000000000000000000000000000000000000000000000000000BA :1CF65000000000000000000000000000000000000000000000000000000000009E :1CF66C000000000000000000000000000000000000000000000000000000000082 :1CF688000000000000000000000000000000000000000000000000000000000066 :1CF6A400000000000000000000000000000000000000000000000000000000004A :1CF6C000000000000000000000000000000000000000000000000000000000002E :1CF6DC000000000000000000000000000000000000000000000000000000000012 :1CF6F80000000000000000000000000000000000000000000000000000000000F6 :1CF7140000000000000000000000000000000000000000000000000000000000D9 :1CF73000000000000000000000079007772742070726F74656374007772742066613B :1CED9000756C74006E6F7420666F756E640062616420637263006F766572727563 :1CEDAC006E00647271006275737900002020747261636B20002020736563746F00 :1CEDC800722000203F0800D6000000000000000000000000000000000000000060 :1CEDE4000000000000000000000000000000000000000000000000000000000013 :1CEE000000000000000000000000000000000000000000000000000000000000F6 :1CEE1C0000000000000000000000000000000000000000000000000000000000DA :1CEE380000000000000000000000000000000000000000000000000000000000BE :1CEE540000000000000000000000000000000000000000000000000000000000A2 :1CEE70000000000000000000000000000000000000000000000000000000000086 :1CEE8C00000000000000000000000000000000000000000000000000000000006A :1CEEA800000000000000000000000000000000000000000000000000000000004E :1CEEC4000000000000000000000000000000000000000000000000000000000032 :1CEEE0000000000000000000000000000000000000000000000000000000000016 :1CEEFC0000000000000000000000000000000000000000000000000000000000FA :1CEF1800000000000AE :1CF260000000000000000000000000000000000000000000000000000000000092 :1CF27C000000000000000000000000000000000000000000000000000000000076 :1CF29800000000000000000000000000000000000000000000000000000000005A :1CF2B400000000000000000000000000000000000000000000000000000000003E :1CF2D0000000000000000000000000000000000000000000000000000000000022 :1CF2EC000000000000000000000000000000000000000000000000000000000006 :1CF3080000000000000000000000000000000000000000000000000000000000E9 :1CF3240000000000000000000000000000000000000000000000000000000000CD :1CF3400000000000000000000000000000000000000000000000000000000000B1 :1CF35C000000000000000000000000000000000000000000000000000000000095 :1CF378000000000000000000000000000000000000000000000000000000000079 :1CF39400000000000000000000000000000000000000000000000000000000005D :1CF3B0000000000000000000000000000000000000000000000000000000000041 :1CF3CC000000000000000000000000000000000000000000000000000000000025 :1CF3E800000000000000000000000000000000000000000000000000000000000000000000000000000000BD :1CF74C0000000000000000000000000000000000000000000000000000000000A1 :1CF768000000000000000000000000000000000000000000000000000000000085 :1CF784000000000000000000000000000000000000000000000000000000000069 :1CF7A000000000000000000000000000000000000000000000000000000000004D :1CF7BC000000000000000000000000000000000000000000000000000000000031 :1CF7D8000000000000000000000000000000000000000000000000000000000015 :1CF7F40000000000000000000000000000000000000000000000000000000000F9 :1CF8100000000000000000000000000000000000000000000000000000000000DC :1CF82C0000000000000000000000000000000000000000000000000000000000C0 :1CF8480000000000000000000000000000000000000000000000000000000000A4 :1CF864000000000000000000000000000000000000000000000000000000000088 :1CF88000000000000000000000000000000000000000000000000000000000006C :1CF89C000000000000000000000000000000000000000000000000000000000050 :1CF8B8000000000000000000000000000000000000000000000000000000000034 :1CF8D400000000000E8 :1CFC1C0000000000000000000000000000000000000000000000000000000000CC :1CFC380000000000000000000000000000000000000000000000000000000000B0 :1CFC54000000000000000000000000000000000000000000000000000000000094 :1CFC70000000000000000000000000000000000000000000000000000000000078 :1CFC8C00000000000000000000000000000000000000000000000000000000005C :1CFCA8000000000000000000000000000000000000000000000000000000000040 :1CFCC4000000000000000000000000000000000000000000000000000000000024 :1CFCE0000000000000000000000000000000000000000000000000000000000008 :1CFCFC0000000000000000000000000000000000000000000000000000000000EC :1CFD180000000000000000000000000000000000000000000000000000000000CF :1CFD340000000000000000000000000000000000000000000000000000000000B3 :1CFD50000000000000000000000000000000000000000000000000000000000097 :1CFD6C00000000000000000000000000000000000000000000000000000000007B :1CFD8800000000000000000000000000000000000000000000000000000000005F :1CFDA400000000000000000000000000000000000000000000002*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!B߾w!>2*C~=2u:B2~2wE:A*C߶w>"!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6:ʑw:2E**E}DQ>200000000000000000000000000000000000000000000000018 :1CF8F00000000000000000000000000000000000000000000000000000000000FC :1CF90C0000000000000000000000000000000000000000000000000000000000DF :1CF9280000000000000000000000000000000000000000000000000000000000C3 :1CF9440000000000000000000000000000000000000000000000000000000000A7 :1CF96000000000000000000000000000000000000000000000000000000000008B :1CF97C00000000000000000000000000000000000000000000000000000000006F :1CF998000000000000000000000000000000000000000000000000000000000053 :1CF9B4000000000000000000000000000000000000000000000000000000000037 :1CF9D000000000000000000000000000000000000000000000000000000000001B :1CF9EC0000000000000000000000000000000000000000000000000000000000FF :1CFA080000000000000000000000000000000000000000000000000000000000E2 :1CFA240000000000000000000000000000000000000000000000000000000000C6 :1CFA400000000000000000000000000000000000000000000000000000000000AA :1CFA5C00000000000000000000000000000000000000000000000000000000008E :1CFA700000000000043 :1CFDC0000000000000000000000000000000000000000000000000000000000027 :1CFDDC00000000000000000000000000000000000000000000000000000000000B :1CFDF80000000000000000000000000000000000000000000000000000000000EF :1CFE140000000000000000000000000000000000000000000000000000000000D2 :1CFE300000000000000000000000000000000000000000000000000000000000B6 :1CFE4C00000000000000000000000000000000000000000000000000000000009A :1CFE6800000000000000000000000000000000000000000000000000000000007E :1CFE84000000000000000000000000000000000000000000000000000000000062 :1CFEA0000000000000000000000000000000000000000000000000000000000046 :1CFEBC00000000000000000000000000000000000000000000000000000000002A :1CFED800000000000000000000000000000000000000000000000000000000000E :1CFEF40000000000000000000000000000000000000000000000000000000000F2 :1CFF100000000000000000000000000000000000000000000000000000000000D5 :1CFF2C0000000000000000000000000000000000000000000000000000000000B9 :1CFF48000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000072 :1CFA94000000000000000000000000000000000000000000000000000000000056 :1CFAB000000000000000000000000000000000000000000000000000000000003A :1CFACC00000000000000000000000000000000000000000000000000000000001E :1CFAE8000000000000000000000000000000000000000000000000000000000002 :1CFB040000000000000000000000000000000000000000000000000000000000E5 :1CFB200000000000000000000000000000000000000000000000000000000000C9 :1CFB3C0000000000000000000000000000000000000000000000000000000000AD :1CFB58000000000000000000000000000000000000000000000000000000000091 :1CFB74000000000000000000000000000000000000000000000000000000000075 :1CFB90000000000000000000000000000000000000000000000000000000000059 :1CFBAC00000000000000000000000000000000000000000000000000000000003D :1CFBC8000000000000000000000000000000000000000000000000000000000021 :1CFBE4000000000000000000000000000000000000000000000000000000000005 :1CFC00000000000000000000000000000000000000000000000000000000000000000000000000000000009D :1CFF64000000000000000000000000000000000000000000000000000000000081 :1CFF80000000000000000000000000000000000000000000000000000000000065 :09FF9C000000000000000000005C :00000001FF 000000000081 :1CFF80000000000000000000000000000000000000000000000000000000000D2 :1CFE300000000000000000000000000000000000000000000000000000000000B6 :1CFE4C00000000000000000000000000000000000000000000000000000000009A :1CFE6800000000000000000000000000000000000000000000000000000000007E :1CFE84000000000000000000000000000000000000000000000000000000000062 :1CFEA0000000000000000000000000000000000000000000000000000000000046 :1CFEBC00000000000000000000000000000000000000000000000000000000002A :1CFED800000000000000000000000000000000000000000000000000000000000E :1CFEF40000000000000000000000000000000000000000000000000000000000F2 :1CFF100000000000000000000000000000000000000000000000000000000000D5 :1CFF2C0000000000000000000000000000000000000000000000000000000000B9 :1CFF4800000000000000000000000000000000000 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL