IMD 1.16: 1/06/2007 9:50:05 FOGCPM.158 --FOGCPM158CPM3 SYS CPM3 SYSH-01-00 87 -CPM158 DOCC128MOD DOC CXDISK AQM !"#$%&'()*+,-CXDISK AQM)./0123CXEQU LIB456789:;<=>?@ABCCXEQU LIBDRDCBM20 COMjEFGHIJKLMNOPQRRDCBM DOC-STUVWXRDMS233CCOMYZ[\]^_`abcdefghRDMS233CCOM3ijklmnoRDMS DOCRpqrstuvwxyzRDMS 128{|RDMS233CCQ }~RDMS233CCQ 7SCREEN40COMUNIDRIVECOMeUNIDRIVEDOCUNIDRIVECQ ;C1571-2 COMThis is the disk name. STATEMAN BnDH+Copyright (C) 1982, Digital Researchn.; BNKBIOS3 SPR F000 0C00 BNKBIOS3 SPR C600 1A00 RESBDOS3 SPR EA00 0600 BNKBDOS3 SPR 9800 2E00 58K TPA $$$$$F1F2dir dir F5F6F712 Dec 86 F9F10F11F16F17F18F19F20F21F22F23F24F25F26F27F28F29F30F31Help  33#wWWaAA44$zZZsSSeEE55%rRRdDD66&cCCfFFtTTxXX77'yYYgGG88(bBBhHHuUUvVV99)iII jJJ 000mMM kKK oOOnNN+++pPPlLL ---..>::[{@@@,,<###`***;;]}===~^^||//?\11!___ 022" ! qQQ🟟888555 222444777111+++--- 666999333000..."3DUfw SeڢCߌڈj?'^܊ڈd 7ӽѲ@Yޯ݊ڈf 7ӽѲw#yފڈhQۆڈ` 7ӽѲ܊ڈb 7ӽѲ @(y2 ~y# xzxy>2y2 xxy x( Pxyz2*P : 27ӽѲ  x( x2 $xy©( HYʪ Û2%>2y2ܯy >yxUy x: >@2xH :"A*a~<6,>w,}s >c2a!""A:y >yw!S~=2 !"A!6: :( 4((!"A>2:S2:2!"A:[/(>G:Z/G:U/怰Gx(2!6>=2 ">2!"A:2G*$(~wx2!"AxW(  ,>@)x  !>x(' (  > x < 2y2!"!O˶!"07>y( 2!S 2>!2>!S/y20x4nFw27!6"Aɯ2u!"A!"A>!= 6!"Aw:S"0>2!"0>8>2%!L5 !)"0!0"0:N0,!T"00:>M>2%!["0!b"0!y"0>2%:N >#w>=2z!s4,~< >vwo>w!"-> â>8!Ow!N"-:O!"0>2%>22>2%!O!"0:P2!O~w:N2L!"0!:N!l0!,"-: 2!#"-!"-Q!5"-Q!c"-:N80 0?:!O!l"-Q:O! :2Q!"-Rɯ!s5.O ˮ>C2Rɯ2R!>w>28 !O!"-!N"-ɯ2:N2K!"-!"-:s0!>w>2>2!"-!K5 "* 2=2 xxy xaNʹ%!MD5 :Rw͌!60:O >2R!u4~6v!"-:O!un~2Q>02y :y y:D< y2Dx2E"!91*x(%:D !:E ɱ(:D !:E >2D:PRT2 6551 RS232   (Bx2'$ > 2G:aOx2a0 *#" x2 x2 x:2a( > 8'y :o"?!91*A*?:2Ͱ2C2:C"?*?KEYS 80COL 40COL PRT1 AqʄϬJڦɹqʹʹʹʹ^GʺqʹʹʹʹiWʹqF?ήНt+ʹq<>X0_~#f6! :2~2/w x 2% BIOS Err on A: No CCP.COM file !!,!CCP COMͺ!ͨ*2 ͨ2x2"="A_>t`drʃ+!0 2~2w/ x ɯ2!"<(| **)>U | %~( O #>/<033O _ W{ !ͨ:AO !ͨ* ***)>&| h&)))~^U~g > >w^8^%**)>U2!"*"!!***)0&(K|loÈÍjQ>2Ã1Oj$|Ãà à ÃBB+"}{_}o>2~77ø~7"9:OG#Q{ozg# ""!2*%DM**ѵ+)) H~#+}#<:<ʲ<77:<ʢ=2(*f*(}DɯQ"(>QKQKQ>Q"%Q!*$K*"x!*!@$@hK\K:K ~#~ w*NK*NK^#V#N#F!x>QGQx3ڰbڼqҼo5p5"""*!yb! ~G*!NKկ2}!,"**NK6 :+OK2$^#V#N#FxNp:$p:Gjxj Y# A>QFQKK{<<ʽ! ~6 69BK! OSn.;$Nwy!"(9"f1f! Ҕ2! ~#foCOPYRIGHT (C) 1982, DIGITAL RESEARCH 151282$3ByɎlptx|<2 !x(!"!6 ERTWINE VONQ Q > y>y x xi(xxyx(i a y* i a! i azƯ ߯y y!"2!"u, e!*  3.~ , e"!* !"S: None Missing  :*( b  :*({*b! Attache P  None P  None P  None P Morrow MD3c(?Osborne DDK ? Slicer 9@ Epson Euroͭ(  IBM-8 DS L(  KayPro IV L(? KayPro II c(^ Morrow MD2cP0?9@ Epson QX10͡P  Epson QX10I ? IBM-8 SS I ?@:0͵:ͦ:-ĵ:/ 0:͵G!:R_p{O<2Rٯ1!D/( ? "(G(8)>OG>'G(8>O2?20 :2:2:8s O{22:"e>H2R:R=( =(=(=W͵; ##"F:Eِ2x2E:*Pلg"P*F~2#~2#"F:G:( :E2:E=2E :<?2:2:_(H:(!8.{(: :Drive A*C* ~G*C+~( $<W*P>2E!H"F*))".P**Fs#r#"F*,} !H"F:G:(/:EG#~2+~2W:; = :E٧͖*"P"C:++~G2#2E<2~G:x2A2!x>xInsert Disk X in %xy:|: F= :E٧(͖xy͡z0:G: 3>_>W :E٧͖: ( (>>>>x *DM! "DMÿ"BKͿ:@1 ͡0:G: >Wcԯ_:E٧͖>W h# ͏*A^#V!ͥ(x y(>2͇*A^#VV :?G:@< U :@=W:?=2@2> %:G xG(>G2!"F͡>G (x8F*C+6ү2<2!"Pӧ.R<*C+6 [0ƀ>'\>:$O!l ~!(:*Jͪ!ay*Hͪ!4^w (~P~26#"x2y2> ("(@`8 {0 `0!Dx G6 #wx! $ GWx̀#= _y(0.pG{@x(!D ww_B!PÀ:$O!l pG~!D/(ή!X"#* `" >2$> ͉>@y> ͉>y!" $>2$>yy(0x!D 6#= wx! $ ̓x>@_ ̀#= y(1,͓͐4(<(<(<(<  @A8 w=TtYy:*EQRW)(G!f ~#fo!*$s#r͐ ͐G.4͐*$## w <2$͐ _*$##V...  T(0$,c2_x=(,:$ Oy :$-6h&))Oo* ~  ;8#>!$!$2>O"$*#*$~#foy(!6 !A( W͓͐!W͠:$ > ͖0:8G:$O<2$:$>@ >1؇_x!/y7͖7?(6:$!!2$*_~G<}s >V A:$ ><2$U:$(=2$A:$<2$A r:$<2$*$:$o|g~>2$>>͠*$:$8#=2$~#( ͠:$ ><0GF˯2$ͨ!"$͟!+| !PWy-x + A* +RDMbk#+6( A* +ȯRDM* +T]+# w=:$(<2$.bf:2:2:2:Q2Q:2:"2"Ϳ>2$~͍> 2$Ͷ8w͟Ϳ8V:"2"eH ů1  f>2$Ϳ>2$!~͠#( }Pause:"@2":$y xVqUHPͽ(:q$2q$:"w : $G:$0&0>2$>:q$ ʷ2q$>y y 2$y!Su!c"_"a6d*$| 1 p8   G# :O y2P!O:O:O(:Q!Oˆ:OO>z>y*=>~y8*"!@i i a a>2??>~ 2O!s6,6v,6v!:$(!:8>2_^#V#~2RY Q>yxyɢ & %80 column display ">2D>2!"!6>G^>:$oxyy!Q "* ^#V#"^#V"! ^#VO GO TO SD.2 TRK 0. OTRANA ATTACHE FMT. ADDED. (MFM/TYPE6) GLENN FAUS (707) 546-7805. T !@+0>42 TESTING ONLY. IT HAS BEEN TESTED BUT HAS NOT YET PASSED QA. THIS RELEASE CREATES DISK TYPE6 WHICH, LETS SD.1 TRK 39 Ty CP/M 3.0 On the Commodore 128 12 DEC 86 "USER BEWARE: THIS VERSION OF THE SOFTWARE IS A PRE-RELEASE FORQ Y Q Q Y Y Y Q2::OB >>2!  ~y+  >2"2N!"H"J!"L!`"&"&"&""%T`2i`z n&*&)~#fo*&)~#fo~#fo2 2ɯ BIOS Error on : T-, S-2:OB :2 1 0!^#V#{(++~2 y2+V+^ cy2i&) ~#fo{ !~2 !~#foi`"i`"i`":ڗ>2#×:#<2#*=‡*":*}®:=::<>2*i^#V+ d!K*}@*)): K:) O "!w [O?WGzO:VxGyOGxwq*}}ʴ>2d:#>29ï2~2#!   )xð*}*}"*x"xm*^#V* s#r**s#r*:Y4Y̓**~#ng* s#r ^#Va##)""xx!"""XC*~<*":!:¾*}*"x"*"g*3:= :Oi :=H:Gi a6:G/O**W :T=ҍ aʚ~6*:X)!:T>qk!:6>X*{Q:_2{2Ē"͂"X~<#cdfg!"()*N!r)!N!)z<*)"!":X*:w:w#:w*2*}D̓¡>2ͱԸ߷?~¾¾ʿƿ>w͙=2͜:wÚ~̓ʑpá!6NwͧBpͧÚgsr͐-͜ħͤS)_ͤ̓~?w͐s-?F͜pN͆p# Þ͐*6!¿?~p*6 >2ͱݸԸ߷ͷw*oq͋"@6͚Xͤ͋͗wO~<: g~w#w#6##)͋@ * g~?G++!o#~>T}! 6**#K"G*~ xr͐-xą@˵7(͚Sʀw :<RHͥ:>~c!o#~E^#V)G#~#~!~ b k##N#F#^#V#~#fo~o2{2g*wޫʪҢÞ+}*#}o|g:O*s#r#w!~w/~@w//Hͥ*e>=)_g:0"ök*w)*c)-͐ͤÀk*s":;:r2͚Ψù͚Ψµ͚}/_|/*eW}_*c"e}o|g"c>2{—>2—͇ͱ* «>2͙wBp+һ:w͚AP{ 2W>O2ø͐R*e):r͚Ψc2ZT͐-گ3͗@YsY̓Y׸Yͅ:߷Asһ:@һ@һ$͚̓Aب=:<~?¯kú?~?ʾZT͐ں*>o"͒"!ê:Oݬ"Ý͐6͚ ~2Asv@NN~v$̓W+vw̚v$̓rrͅ:r߷>2+A@2r!Z2!"ög:2T͐-:ʹ>2<2گ!w: >2*6ݬݯO~<w:*)@ u:G*g`~!x_<_@*oy<:/G?~##~? 6K@?F6##N6ⸯ2p##q:#*~w>2*p@! ~*"v@*w# ) 6#̸͙N#FxT]## #~ ȷ  *4# ' 4! *~^ ^33G# Pv:dv6 y2@ !)#w*~"ҷ!Fw䷨ҷ̓ҷ:w̚":>廯2̓*~wć"̀!~$6:03i"!~6*e>=)Q!QX@˵ >2 ˵!!q#p#w2wW*e_3ҫ-!s:!xQ*:<œ. ʩ.ʩAܥrr##sܥ<}rcN! ~态O>G~G!~G~o>_yG~.|°! w:ck[!x?[! ~ʤ͆[͗PPvqO-á=.:<ʰ! Vq##~_@wͶ:WMںʛ>úͶ >TJ:!ʷ͞x!Ǵw4 ϴPW޴PܥÂեÂ*!!~~#~O~#FsO s#r:(„y==„*!^W*y^#Vx7=2wͼկw#KWK*"J T͞*:["+SX:ڜq:ʺ!ʵ>2ܥͤ2ѳO ̧DM͸}޳>r""2:2* :::29:>:>*ڈ>F6:_/G:ʧ:ڨ|OͤG:_O̧̧zW{²|:*}|BKN² zyG:!vq:vեvMڂ?Ͷ >T͓Â!">Â:G:O:h=27ryy/W!:l=:<>w##~2 4~?ɱ¹:<ɱɱüޯAX2rK:w++~=wv4͗O5:2X!"*>o+"! *!b"ݬ": r#~?w#>r# L=J Lv wbܥ?~O ͆ڱ†wŒ~è# # x ͗w ٰڰٰڰw@ ~wb͐Úݪ!x>w~6:6~#+w#w+~;wɯ2KOFq-yl?Npg:ʓ~( ˆʀHÈ2xą ):@ίO~#w͚ʀôb_++V@* )͗Os++r~Gw#* #~$%+@*9>  #>? ;*~ w-xąH"0 *ĊHEʀ@~›:6¦w͚̋ÇPY*{zBKNyʺ Nú2: *~w *" ݬ2>ʄ@~k:(s~*9~Ês~Ը~ͅ<G:<ޭ2x# W:<­:22G?>Grx~:2Ô##~*$*">2̀2kºʺ**iҺ@:O~2~WW:2Ôyʛ?ʔx ʔ |̷ǭÔN:r:/GyOOA +¬ ¢y2:x¹o&:W>OͫE:ڟ?N/*"y2ͦ>2 ݬwޫDM*w6# x *ow**ws#r̀*i6#6*}"w@*|<ď>!8>8> t>nͦv8 ~*ownT] KKͦޫ*w"wͦ"w@ :ëNɫ N#Fyث*}|h#ð*ͫ# 6RX*q6!"@**#":&2͒:È0:+Òy<_W`iͫDM*w ~bNpwޫDM*we ^#V#~2>â9͆>!"*y³*X*ÿ͂"*g*K!~<:wb##>w#wħ> r!~#22Zw*q>ww:c *#*is#r*:!:)e:O!*c:Oͫ}@2æ ~á*g:o$*~K6?~wKw**i{#zir+s{O:w:Ғ4~:w?r##rp# ä |g}oì*g #G ¾1*q:*w***> r 2":O:G2!w*~zWw+ !z?#~*!* *G!O~2~m͗O~t>2?:2g͝DM*0MD"!*MD$:Oë!N: «G>O: §ù*ħ :ڧn` ~#foͤ2O̧"}:O*"!s#r#p*kN#F*m^#V#F*:O}|y9*+"*}|yP#9**DM"*ks#r*ms#r#pyox*kw#w*mw#w#w>2'å2*OͶyڲò<*eͲ:0!::ò2*>*ͫ"4#4#4)7 #  w#*J|^#V#"i##"k##"m###"o#"q##"!s )*s!)*|!6~67rrorFile Exists? in Filenameòò>2a.":2:<:55;:2ɯ22{_zW{_zW )7CP/M Error On : Disk I/OInvalid DriveRead/Only FileRead/Only DiskPassword E)"!z<~rs^#V#N#FxN:oʲ̀õ(# Þry< <<%zrͷr6r9rMDÌ:o!6!h: ʚnt2 r62>rz<*9ʌ^: ~x ):*:šš>*(+"(w++2+2+ɝp؝!" >2+2*jx.#NzW::!2W!5=^x^z:m:*;#wO:͂^2¢ů͠Ġ:!ڽ*(~ݞמ5Wèՠ؝jמM2ͨxΠ*(+w"(j͜ !%"(^-:*$P:<\:W:2xM s:<9>2:*9x~+q’x2:**&~2+o#"&!+6Mş:W:2x ͺ*(+"(w  :ܟ>2*2:*(:+w"(ͺ:G::+̜2 5*(~o#"(Mš*(~`Uoj*(~#"(Ñ!*~6s!+6:+‚xoڊ{2Ó#w:2.+:.2-!%"(2*!£"&!*~4:2-Ԃ:Gͳͨ^2+>2:2*N#G2 2GH)+6:2,:!- ͜:,!͜+*(~L#Bxz:*:*(~ʓOr ͜ ͜! O(Ì*(~2**}ʷ!#¶!""÷:_:*(#wΝxH!£)6"&:!£ x5~y 5 6y(^͜@O:=7:͜y ͜:I ͜:=e: zz#͂͜:! ͜ G:Ҏ>xʝʝw>ɯw̩z:»!>wɯ:=zxzz::G:=/ͽx:Āy!4 šn!6@G:x: P:<: P n6 t6! ^6 t6u:)<͠^!Ó*"r*r"ÿ<:g:!͐*f}D! ~6t!rͷ֛O(^ƛƛƛ  :Function = File = !,!"h!9"f! ͉:2t™:!=Hgo:O*;*͂:A2=/::0! dگ61#d ڸïp#:w#6 !6:6 *#!)6.#)͂ O(BDOS > wM  2*7w#6?#7 .,:;[]=<>|!?]45#Ra{i_p# l s s l ls:¬MA`U1:8 0 tt ss #N0:CP/M DISK,65 B-P 8 0 U0* `  L& 3) 0` i) ` i) ` 3) * ` *  hL ܭ ݩhhj:*)i:*i i  ) `آ08 i:` ( *   ;* hL (8* / *), p#   h , P, ` ,  {'L&*j:*` )**0 )**L(L&=*;* :* :*)<*0J*!*)WR9*Ȯ:* f(L',?ߍ`* ) * ) *L& , *L ( 8* Ѝ`  E * 7 *  L L )` (- ) * L3),:* ( i(L{'I- -) f( I& {' * ` ( f( I&) I&)  I&)ݭ $L ( *  1 .( ) L L0) ( )0* )$ )x? 2L.( 7&x> L.&]&&&'''N'''4& (#( *ll  iG&l&xIݩ, `) *C-128MOD.DOC 12/16/86 ============================================================================= INTRO: This library contains the following files: cpm+.sys cxequ.lib cxdisk.asm ----------------------------------------------------------------------------- Some time ago, a friend of mine suggested that I try to get the C-128 to read and write disks for his Otrana Attache Computer. After much assembly, here are the results. The Otrana uses the following disk format: MFM 10 sectors/track 512 byte sectors Directory is track 3 sects. 1 to 8 First data track is track 3 sect 9 track 39 sect 10 rolls over to track 0 sect 1. track 0 sect 1 is at the beginning of the disk. Originally I was able to modify Disk Type 2 to work, but this was just a stop gap measure. Eventually I was able to create a new Type (type 6) to do the job. CXEQU.LIB has been modified to show the USER BEWARE message and declare the new TYPE 6. CXDISK.ASM has been modified to provide TYPE 6. The version of CPM3.SYS included has been Assembled with the above corrections made. This is ready to run. The Source is included to allow further experimen- tation. To assemble a new version just replace the two source files in the CPM#121.LBR on FOG #1 with the two files included in this library and follow the directions in the CPM#121.LBR documentation. Glenn Faus 12/16/86 707-546-7805  vCXDISK.ASM]  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHoIJKLMNOPQRSTUVWXYZ[\i_~|0m ~_LqcN:-^.v8b\bZ;}t.ӎo/Ŵ/1mˏicژ3wB^/"qcNpO9lu,b׉8Z*ݿ`jjjj{aKIdα請]P)F_<~gjo1$Y=K05k+jjޟԴ\zuDN.$򇿽_.W1nc ic R:15mXFz ї.-m~$BJܘh^HƘԴe>+"r$}^L!W >hHCL)]~ '4J$֞8ngP w_^#4\+'@C˅iŻ#uQ.w?ővđ޾5\+'qhw0}^(%q.:'q+vk,,k, X(%Q\rŮc%0Ij,!vB=rŮc P;_B9B.BƍTS=\`j bW1,ԸY>lj1_K Uu+vP)]ZޚB||ٚB|LͅMMѯC+> l~\1mǸ1\+7;SS$iC( Iaw>ŸL$>:g8BdξϞs,LS\|i.wr=>)yNL.е=;S8aSSS$iCH #@w$:RSOqeh B]<$Q.i,ԯA()I K">BIXܘ'ӆL?OOk`YΏX"r!R[ӆΏhQsaIđ#4mLqiÖ ):J.o M7i"{S}x#Kx0m@?SSpdD7o#0:tB!'I .iA^O{ :$?IIyoڀ bڀ~ L{1m@DRRޛ6.=k`.o. tys1m %icS.t{;STu8 m\ aY(Hu1GA&/\[qMKƮΦ}ƮΦxr_| =cOyO%2ynN~Lj'Wqysi؋)zƴ1mL-{3E7w ?c.,^a6Ÿm}{c*#-0]87m,WÛ"&6He4[(HhGS` R9:Sb!RSڲۚʘ_ ~/aX}^_ޡ1n/﨏8H)- ~/wxʥuxx!'>8}4+:JXi LNxu~wÛ_um_•g 9{*/ iLyO)C'rd\)K7msaqH 3PD&KewL1n2%m[ý)~hto_^L3p;HKꇶN?icژ6AML]e h(S;_B9BY\4 >)K7msaqRMfSqqr 컎T:9StWr6 }&tS$0 w\8G x6Ew1,W' q#đB]s,Rvp¦ILӆ~/` PYA GCљ6 ס 9I2m@?ݖ)$ɴIIyoڀ$ /$ R9:*8 (T_ =FuǼ1:!D:[Z2mL/o.-{3Ÿɨnv?` _<*Om s޳$d4)5@Corew4E}ymj'vWmY $G ijPsaqKw47@C'a Y%QaK][wd\0be4E.WM1 eI:.o.+׹ٙbt770uniBLKnP떆){tn}O@CDobuK=a:=h(P\X)3JbJj;xBAR[c/ ᶋu+h+Mأu;2Ÿɨn6E<6ɳ: SQB)|4F(尥 rGS\P%\8Szc/x: Srt򳘢= y'ijgGh'WQ"][IvG4TB4t1n)y$R8)أg }F( OA9V ivn%RL]eͥ=׹xGu&C'spysiڞ)\\s[W)MƸL]e ͥk~9<|^M&4~da%QkaSt);S ܘ"&ז@C)_VqGS lrm;Zޚ= 9q#6/;4UܑĹ)\y_VqVh(a5i|IL%_ ~/@C'ab y 4F(b _2v2hݖn(58}4œ+*؊s %,X# ݒ/ޚbeА7 = S4gdϦţhhaKA*GG!? )ƸxSG: -MrtА9= ? @tCA*GG!?GSm0œ{m; QB=uK;Jy')H(g1ŏЧO۶SnܙK^ܫ h$LeqrtvnM֌ 9F8\D< 9_Nb <œNl  83$0=>lM1 h(P.QgSStWúߋ{hh%HA*GGeq)aАOr1f 7BP`_lMM]ͥk{v7rysiyZ):KݶEf  ~#5#Oc)Ƹx q#T{'*đL1 2h$L|rGSQ4bij)D)cijP]^h8beѣ7݃)cѣ7S<ǵ$JJd*PM7t@Yeb?tBRɧ$SS\P!BןM]ͥk{v" )Ƹ$Sra.o.m]]۳3Ew1/7Ƶ)rq4SX8Rkaq?icژ>%ݙHvG YL|B2Ez*Ϩm[MM%˛K[Zh Fu@2/@C,i=xzK׵kזJawDC%Yg5#SS4KwX>ɕgA\@C%.tTg[:gi <:S,`n.o.-QBkY(HZic (yn>(L C+f@CoPsaq )Ƹ_F0e?)|P!C'SrBןM]Ͽi 3EWM1  c/TcS\0:!q\a﨏p rtΗyα274ӳHyO%1E.WM1 e4E.W~;c.#]Wu>h31đBa~0E] =b 4t&:()HmiH7b?tb.ytn}Oh$L< 9)L][wD߭b<!s時TWu>h7#?]'g1n0.h((HmɗD][wd>H@CNj܈#C'\X)rl1n0.b\0bK ~#tys!C'\Xy&)➮))zƴA'L< A2,tÖ f/L5ktR8x uQܓvYq$vGH:b P\ @]=ո6E7w ܎ 4tV!4z33ϦiM1 d44z31G9P.tUƼ\\s[:SKuum&.; )A<ӳhjvc/b:MfS<|v\ gSq$SԱh'WQ"܎lژ64zBA 3mL1 R4taʅޙ_Ì>MQ}!)ls.)M}8!q¦%rw 3י 5H >G,LCАO_B$2Ez*`wl\qn 4,SSF9Ϧ.յ=;5k;SqYF w?=^\ںg`\0be4Ew1/~#ûgg)OHc.L:-?):mϹxncLMSضkڳ|gP)rq4V; A)3RضkڳlT ׭)Ƹ_ q#4zv2X#3E3^޴rO<ĵMM1 RMK j,bG[9RBMQb[ v+GJ|`b9PN*XL1n2r4tPR[c/đx΁1-]){tn}O@c)ls.)['c܈)Kuumc@\a67Hh:L[sh;'1mLĵLQ7˧O<ĵԴ1nιx]򸼹5NTqGqOe u9)Ƹx ʅK76Ah$LuuN SC)rqiKcȜc1E{ LL} s,˷D?ո~0œ+m0P , |"gcȜc1ŕ:JXh-qޱ)p l jSضkv;S>Mɞ4xr)l5ktg65mhs.)iM%˛K lT<_ LkIhS<m0АvL} FzZ]򸼹5NYF*83E@C}̅Q#TMX"D<6A=.o.m0P"gr`}6E.@C>%E#}tt4HϦ2Ҏ aH< rʥr25i ܦm;SKuumh(Ssaq4oS4~(Okv1@CG "QLfSrO>=mcojޟĴ1mLSk -xg.ylrmg4tÖXS`k0/a7h(P,ݑTB~%ͅ?1gT0bPÖB~%c/;z<ʘ9Ͽn߾c0EwN)éww¶=-r6MaۖJawl>):|C-a0œ{F ۶V c{M`1nxyUfS<mv36xrHa۞sI:FLM6ic¶=u2ƍܙs.)\c`XfSqtx{|tRƴ1mL7ҦmϹx3Ew1/)ls.)9ܾ}5}ǀ~SBO} sp%s>b l1nPOcoĴ1mL9m)%sI沏c`X)ƸA]f̦1=fS9mҝ)q%s> )wL$2E.cܠ.@C}P.4mWn\)5̘M]9m.h1n>%tqW{ǯB~S4S'!d>MQ2C KW6E.WM¶+EԴ1mL6|gqݴ ar69I$Lѯa`~ 3fSTu3~cC)G b>M~cCNj܈¦š '1mLJ9lן]/;Rsɴ!)ND3,]ϹȻ:JpgI9o8ʅ~= Ãi?ح,\uQ.+܆iLΗG>%'!P.4zzҐ9<6H9l/a/_ȅ~{2)-uK>%'! -=NoiLrtSrr_L[2}̅GϿ\?ic^]s|!q.:1 BM»v(ĹiCxӄ7'5n3mR[:B,%6xӛ7%eOu$$/jħv):6m.h~l]2E] ܮ}׿qW^*;_K 3)֥;Stckc`X)4tLΟ)|4C< }`2>:9J.oO<åvhi%uB{1u ]<ߙbdeKry R9:{J==iz0E]~-?(D x*` ܊s YQaK\t:rƴ1mLuߎq#wr@CARvR9BɉO1mǸ)7Búߋ#t}yg.y¦Û=?6(*ɉO$ELQ}!kbS<9Ԇ.MM6 \eMq?.ݙCn׾};S lrm]j¶ݯ@CHN|"R[SS@C[=sѐ9ɕgnŹLMQ}$]"d\@C>=Ƶ0ɷ$(MMQ}cm.l*cXv׻ 4t}LK09)LuK}|$S\i7h nMW4đf y 0=;Ouk}%p$&ϞѸvM7rtΗL%MmkaSq8A*ߙ_Ì>MѯaF ~#ijPQb.שM=r<{HחwSr)#K\ٛ—̦xr,[q.=zӎJ$q.`>:xS< q8A*B)r[ 4ˑT.P'{&'SiEZtg*cXv׻ 4Dt}LKo _2Ji7? aݶ2ӜMWMq<<}tT"sS8aSSS$icژ]fiۛޙIMn沏x1LQ}!kM%MmrSqaI>0; cP,iL(Sp\)K>0%7bzvm&/& aJI q,1mǸ)7BחwđugjqMg,)H()y¶ݯ@C=H\tdd6œ+` ܊sљKA*)|pϦ۵o\)ή ]<nŹ>wc>MY\twl.ylrmgo _2v@Cu}trؒ8EGξ 3R[/'xrϨ/'iŹLQ !.P"Ke3œ{ew[q.:SS L0sѾ'S8aSƴ1=.r+Ewgqᗃ)icژٗ\tw7~6 '1mLt܏ݙCn׾]FL1n2ɵ=vo)lZ4t$Y2 8$SSTu8 A*G׆,@CAx|rK"v8q-l.ylrmk\ ];6H;Skч)5H ~#rt򳘢ٵשM=eJ=qÖ.t}yG>%'!=)|l'Wk؛=p6EO#]÷>h%0=%7BMQ\HlT0h0yFhakT0beIч)Ƹx ʅ"&6 mrF*, 3 gJ9lyxSRj'B5M7E`MmkaSq: SaK|xxS8aSƴAry#|IBB| R[J.oגLFw;SqaG]]r g:')J7E{ KnC?X%7BM:JX ǿoąXxZ8H{J9lMѯal~ 3)5LԎc/N/D#3E`6Vg:')S 8+ %7B03E`162%}ߎva>StWi g߷c8Cʡopj?Pʡ'_}fGGmjqM-K`STu_[dig >0}kh=C2mwg C<. | ȳ8#>BM< %p2mr]}1=)c67` 'ljξopC%caKLpj! [ʅ]`jξopjreE-}ߎꀆ^huS.'%;\Nz_%'1m`ژ6'vWmYv3E7w ?c.,Uư4 L ➂T.P,׭)OL1 2h$Leqrtvn9)|ɘ)Ƹ xS8aƴ1mLOmѵ!?˝)K7msaqH )Ƹ_F ^(BCf]n(g\Udž>}'f,rtUdž>}MMLÑT.¹ЧOӎ~n7pd p?64Ot4Y(H)|xo' N{S<%r@COS㻟h7 M8x ~+~}gq!@CA>GzM1 4)H(gi9Ptt`zn/L]B;0,TW0]_Qsaqp¦Aw22Mpn/?icژ6~W ܮ}׿3E3Rضu:ܛ<퍩)M_nL#H6Ew1/A*úߋ3E aݷ=;SSts+v[ M' R9:c.,L|lf ~+t}KÑ 3mL kyr`{b6/T.6E Ra~nk_~ͯ[v6HeStsɵeIm@$ R9<GLqU)KR}۳371E.WM1 %"+̦sr;ggn~nk\: },F!n=g!vn T 'goo?\(尥YJI莔 ,T8qO< r.Bu K"RX8B|ݚ6(87BN|%Qt$B);ݑD )eα~)))I"4B|RYAiIhHqx5Q.'{GOin׾ooL%_ۚ"ogZvnP(ZvnMQ !"khNzT"S~0;!,TsG2S.A]wɵe5E<~){lrmT66mL|s}tgʁQN*;_K #r9icʁܙ6}F ۶"h(%0;hx?~4mʳi-{iޙKb5œCn׾)zƴRض#BRM ܮ}{ys3ŸHhq`1n  ~#¶e)l _2{-PǯmM䞑b^ڷ JE-{i{ R9@Aѡ$ 9 =}c/_M[>~EC/rtÑ偂0CIr{J9lMtGc/vđKP]GJEi|?8c/t]G)c/&ŖLSlKc`XL1  Tc\)šq3œHc/ =cOyOsQ,rڙbd럁b-j\ ?/_O>-;Su`[v;SfBNB=~nk'[>LM6 R$ij;_TqGÑɗDyO~LDRGUʦi-{i;SԱhzt0N̦ph(MNB|p=VܑN~=~nk'W*RlK3E]p;c;|II) MS` R4Ŗ;StW춦ɵe5E]p;c;/?uQS;_ԋK Rhӧ|II)c0œȡ 9I3ŸHn)${zL1d2/Rض#BM R9:*8D5e@PIhxr9!'iwh(aD&'cbhąq#rEh>Іݙb ͱK )z SqIRض#qw%ez {ǹT:qG` *АO_ MG)Q.ijPIhl\ MMM6 rW3mupd đdDחwSric/jR;~ߙKJCh$L< t}yG/[STu8P̦2ewzw= ]OxkSܞ};Sۗ{ %Ϟt!3ᏦxrpnNm`gFC%.؛bdeWg ]O/׿6E.=:4YLMhO5MTR;~1:o|;zZǞ8V7E @C< %QEyO.ש@C>}25mL]jۯS;F'wHa0unNg3Ÿɨ.xzw=?"Cf_)R;~ڳlqQ]4t=\ddž=;o4w&jhF÷OcbSSSU;S|ٶ; 9 P]4H5}> '15ݶ7ٴ1mKi\ ➆#K tvŴ~;/ȧ$&w>¦ H+S.].b*cXƘur2ŸnϮb9;Sĕ{x aJ=r8R\_=_UưR@C]<}Lq<)=)Ruz>u7~ym'q@cjqQ^)rMKn6Et)=)Ruצȥ75E<~IxJ9l_qe LMM1n2Rm){յۚ'1mLm۳|g*cXv)v3_3E.=)rQ4dkb:xr۶g]kkIbv[nS\9 :KRS}9I"SQm cTX LQm{{{*MM1 R4duumVg:'v[nStWòKuWgצ~MW4$w8H単"+iKc.,^!h(I%ո65E.@C^4HIg3E.=)|ɸ73Ԟ}fSSq$SD!x*Ϩݶ=@CHAJ"\1 GSӆRb*cXvׯwgߙ"dfSDqoro*cXƘur2Ÿn]j"G@CR ,t)=<0%ϞRvR9B)~eS|ٶ;  ].lPs'15Ew1,׻hz_"@C(yKIh)a]_v3_3E.=)˘v30ngzKgrوcI+25Ew1,׻hz_}65ܙ"dܛ=3=Uư_^@CMKdj*cXv׻ 4t}LKo _2Ji7? aݶ2Ӝq.e#%="hc/ @CNj܈#{^ GS&MMM6 9+"Aq1n<=%޴qaH<  ~/|Iij1ɴ~>:^q;ǔÖ`ڀ~ w;GGחwđuG)-]fy0mL_M?7w.wsR/'g*#-^bcÖe^)a9ܾ R9: YL4m ߙ":o'W¶u gSsaqd:L4mħ;StWi([0,rw>lMѥ4",<{FLce-sѻ{Ahg 'ljژ6)_>4m_˝){lrmL%[)~dLJ9?RSaK#IC')jyFʡoSض#QBH)GJ9l)}4~-oo_:EJxگr?icژ6~Wӏ)lߙ6m>ޙbd@C3B5v@5v l.ylrmL1n2ï?"UFߵ.=#1."U*эkOq嶎=;S4=}%Sp{vp41gwgq1,i\cj]3E]C~1E]C߆W1Ÿ>|L%Mmr"W&3E.)xrmLMQ}!з_L%M-):6I5E<6A*—lC߆W1Ÿ>g)ɵ R%~65EObژ6iʡo;Sam25l.8 kƴ3œ+5M؛§)5wR}}чiʡoݙb 7M9;StW7o_nvM%aSqY)MFZvH>!hȧD< >b7B͎j(whj1n17Prצ"G0|RBtǐ9b+4T"yf8eSTuس)yU)lrmCu" ZYfG5vX(T'RL]e ]WÛ 6ʝ)Mư|xrH9SS$iCXJD9lg(,~#> LS~W BNB5c,i)0\B< c`MS3.oMpS;.riۛߚ"Kv)Ҁ hhL; \LmtGCF^h81Hݒݙ~hwwHiwYezvv7t_vHv@C 8%Q?"c.,?icPtF(Y(hژ"qvno~kt淦HgtK;\2oM4QFhz0E¶ ={BuLa;ݙ"3vKv25MNwHiwYezvv7t_vHv@C 8%Q?"c.,?icKrRry# ,e4mL8N75E:ÉOt{[S3xʥno~ktF.淦Hnt Li@ ۶N{4nL|셆#iS`-ڃipgveZowawsLeg4`44+ R9:*8#_uni);˛ :>LM6 nxÖXgp ,ictev)N|jۛߚ"S.t{[S3rN75Ep44d1z`4 m[=G7z&>BÑL)R?c~hߛ~hߙ"fr/~ٙ"  T:ȗD][wdthBN8SS$ik7B(Is晦\={0mL8N75E:ÉOt{[S3xʥno~ktF.淦H&!3(cry#{0E¶ ={BuLa{sg-S͝)R?`ni޿-2)Ҁ(H訬 |Iź}OHg쀆.o.~ 35EObژ6}|Gguˉrt|Qэ`ӟ'GG)C'rk Wαδz8wBkY:H,G k$6p$?ح,rtSrB.Oiw4~ȗDD)-%7h B|RYA\0m8[%QQYA\qRLM> sLIđ|,_R[ȁ8KBXF3,N((HLG|ݒ/xBi B< uK'CBA*GG>%'!/RF\ȱP.{dژ6d_~M= xO uޝRz۷4Y(HHݧ][X{Hr]q2}]{owm!尥5޿''{0mǐ@;HoLL"uzαź PN*Gw$)|R0=@A*Gq%uh8Rn׾1 ,AI ƸDqγZ$m˝)R?`niiwY,;SS$iC?75.ӎR\N($R[<ݟ- G R9LnD0m0Qх5m't!WQzG.e{0m0#vn)-=,4!W;_wđPIh[HoL!'O.V9ZK``:SN*Gw$);_ LqO=NrtoPN() ڷu:ܛ6:;S~;,fv7t_vILӆBokz^ÅrҷooD oi8PW R9@?;_A*GGeqhmz`A*GG=qBBqeqm ֲI ;_~ִ -#Mo?>uKeqh̓iuKWʁxz=)e';;_X"SkaI -M&ƴ'] ]` rtGLuKqt)09;_ Ӂ1Mַ7m;S~2}],pY'1mLq7ɝ)Ҁ_?- G Ry-)Ҁ˛˫Wߏ^޽z_Mh(wL;_tCA*D]}0En.n9npPʿ8i@C{%HeqgGy0Esb4}C,/vHwՄn G RyiGA*nk x9ܾ!vniG9- GCљ" z{ٽz{2); )b2Mx S~tXfv7t_h(HDiڙ" vzؓ/G*8D< ?ʃ)Ҁ o9'15Er;~9zՄn G R)HmM\\^NWߏ^޽z^^Mh(wL;_4QD]}0EN~-pY&4i"to4@c4=yojj4v:rxxë N,2S?ۚ" z{9z{2!\\_"P`b!vni ']}0EN~-fPʿ8ҽ)Ҁ{ =rɗDCd#uI"i×˷{~@scjޟitqrvjn G R9)Ҁ˛˫ _Mh(wL;_ iG]}0ENe-尻_2 O;HXcOB|݆S@CA*q 9S"vnÃ)Ҁǟ]?/}[SSS/ëië4Y(H兦)Ҁ˛˫ݫӫ); )b& R9: >"n2햛27ۛeBCA*vđLHi?.@歩)zSS/p/o&4474Y(He `i˴;ܼ~e˄r}mt@CcmP4|WLp.7尻_r@CA*&HHn4H>\sLjjj4en~9zՄᆆ# LtKA*nk4en^}?{zeBC~6E:c1B4-2M ͉v|WLpLfv72 Oq[SS.ѹx@sojޟi˴;rxxë M G Ry[ Rv[S7W/pݫ׻W/); )bSD]}0ELriwY,Pʿ8ҭ)Ҁ[)Ҁ CtEitϿ?tBA*ӟ)H5HS7W/c/ӫ׻W/); )bBA*ӴМhlj|WLa_wawsY&4i"gSzؓ/G*8D< ?ʃ)ҀD/ ]>ʹ35EObj4pë/o&4t}KÑT^hzKA*nk4pc/Ww^&4kS3v S,-P4|WL۷r[e:/7h(HDizk4`z G=hq8IijP<" @3M^|˛?pHwՄn G R)Ҁ˛˫^^Lh{ { R&S~tXr[e:/ؓ/G*8D< ?)Ҁi;f_g?_iiw̾Bf:)zSS&S7 "А)R?v:,r[e:/4d4@c4C,BDfzoj4d4!S3v2EN[nvawsL倆LhL| EL7ILM|L\\4dt@CHvn9npА)Ҁ{)ҀD}ii@CHg4da~ " И" @Dޚ'15p;z3RK6}C 8mϹxet05-Maێtg 4ۯޙ" @B.'djjzysiGunyL\\ZV , ]\tﴏ]s{7^\wH.o.m0];c3ލ76A)`25uum)`jzo>LILMTnk;S4HvXm)`r;;S_]k/L= Y3}Ҁ)$S?? ={BuLa{sg-S͝)R?`ni޿-2)Ҁ(H訬 |Iź}OHg쀆.o.~ 35EObژ6}|LFINSTALEXE s| CLS8 FON 1 OFANCFONTPRO <[6FFCONFIGEXE ]eQvCLS10 FONg Q,DELFONTSHP Pn cRESET HP n LCLS12 FONe D7CLSI12 FONqe >.HPL PRF 7fCLSB12 FONe 7c3CLS14 FON\) u@ $*MACRO false equ 0 true equ not false banked equ true EXTSYS equ false ; use external system as disk and char I/O pre$release equ true ; start at Jan 1,1978 78 79 80 81 82 83 84 dt$hx$yr equ 365+365+366+365+365+365+366 ; 1985 1 2 3 4 5 6 7 8 9 10 11 12 date$hex equ dt$hx$yr+31+28+31+30+31+30+31+31+30+31+30+6 date macro db '12 Dec 86' endm ; ; this is only for Pre-Released versions (done in RED) ; warning macro if pre$release db cr,lf,lf db esc,esc,esc,red+20h db 'User Beware:',cr,lf ;1234567890123456789012345678901234567890 db ' This version of the software is a',cr,lf db ' PRE-RELEASE for testing only. It has',cr,lf db ' been tested but has not yet passed QA.',cr,lf db ' This release creates Disk Type6 which,',cr,lf db ' lets sd.1 trk 39 to go to sd.2 trk 0. ',cr,lf db ' Otrana Attache Fmt. added. (MFM/TYPE6)',cr,lf db ' Glenn Faus (707) 546-7805. ',cr,lf db esc,esc,esc,purple+50h endif endm ; ; boot memory map (bank 0 only) ; bios02 equ 3000h ; block$buffer equ 3400h ; uses 2K boot$parm equ 3C00h ; uses about 256 bytes ; ; bank 0 low memory map ; ROM equ 0000h VIC$color equ 1000h ; I/O page only (IO$0 selected) SYS$key$area equ 1000h ; 3 256 byte blocks (allow 4) screen$40 equ 1400h ; 2 X 80 X 25 = 4000 BANK$parm$blk equ 2400h ; allow 0.5K of parameters BIOS8502 equ 2600h ; 1.5K VIC$screen equ 2C00h ; 1K ccp$buffer equ 3000h ; 0c80h (allow 4K) bank0$free equ 4000h ; start of free area in bank 0 ; ; mapped I/O locations ; VIC equ 0D000h ; SID equ 0D400h ; MMU equ 0D500h ; DS8563 equ 0D600h ; 8563 VIC$C$H equ 0D800h ; (memory mapped only in IO$0) VIC$C$L equ 01000h ; (memory and i/o mapped in IO$0) CIA1 equ 0DC00h ; 6526 CIA2 equ 0DD00h ; 6526 USART equ 0DE00h ; 6551 (extrn card) RAM$dsk$base equ 0DF00h ; 8726 ; ; Common memory allocation ; int$block equ 0FC00h ; mode 2 interrupt pointers (to FDFDh) parm$block equ 0FD00h ; system parameters  @buffer equ 0FE00h ; disk buffer (256 bytes) ; 0FF00h ; to 0FFFFh used by 8502 ; ; the following are C128 system equates ; enable$z80 equ 0FFD0h ; 8502 code return$z80 equ 0FFDCh enable$6502 equ 0FFE0h ; Z80 code return$6502 equ 0FFEEh page ; 1st byte used as Intterrupt pointer vic$cmd equ parm$block+1 ;; bios8502 command byte vic$drv equ vic$cmd+1 ; bios8502 drive (bit 0 set, drv 0) vic$trk equ vic$drv+1 ;; bios8502 track # vic$sect equ vic$trk+1 ;; bios8502 sector # vic$count equ vic$sect+1 ; bios8502 sector count vic$data equ vic$count+1 ;; bios8502 data byte to/from cur$drv equ vic$data+1 ; current disk installed to Vir. drive fast equ cur$drv+1 ; bit 0 set, drv 0 is fast. ect. key$tbl equ fast+1 ;; pointer to keyboard table fun$tbl equ key$tbl+2 ;; pointer to function table color$tbl$ptr equ fun$tbl+2 ;; pointer to logical color table fun$offset equ color$tbl$ptr+2 ;; function # to be prepormed sound$1 equ fun$offset+1 ;; unused sound$2 equ sound$1+2 ;; sound$3 equ sound$2+2 ;; @trk equ sound$3+2 ;; current track number @dma equ @trk+2 ;; current DMA address ; ; below here not used by ROM ; @sect equ @dma+2 ; current sector number @cnt equ @sect+2 ; record count for multisector transfer @cbnk equ @cnt+1 ; bank for processor operations @dbnk equ @cbnk+1 ; bank for DMA operations @adrv equ @dbnk+1 ; currently selected disk drive @rdrv equ @adrv+1 ; controller relative disk drive ccp$count equ @rdrv+1 ; number of records in the CCP stat$enable equ ccp$count+1 ; status line enable ; 7 kybrd, key codes(1), functions(0) ; 6 40 column tracking on(0), off(1) ; 0 disk stat, enable(1), disable(0) emulation$adr equ stat$enable+1 ; address of current emulation usart$adr equ emulation$adr+2 ; pointer to USART (6551) register ; CXIO equates int$hl equ usart$adr+2 ; interrupt HL hold location int$stack equ int$hl+2+20 ; currently only 5*2 used user$hl$temp equ int$stack ; user function HL hold location hl$temp equ user$hl$temp+2 ; misc temp storage (used by VECTOR) de$temp equ hl$temp+2 ; misc temp storage (used by VECTOR) a$temp equ de$temp+2 ; misc temp storage (used by VECTOR) source$bnk equ a$temp+1 ; inter bank move source bank # dest$bnk equ source$bnk+1 ; inter bank move dest bank # MFM$tbl$ptr equ dest$bnk+1 ; pointer to MFM table ; 1st release end prt$conv$1 equ MFM$tbl$ptr+2 prt$conv$2 equ prt$conv$1+2 key$FX$function equ prt$conv$2+2 XxD$config equ key$FX$function+2 ; bit 7 0 = no parity 1 = parity ; bit 6 0 = mark/space 1 = odd/even ; bit 5 0 = space/even 1 = mark/odd ; bit 1 0 = 1 stop bit 1 = 2 stop bits ; bit 0 0 = 7 data bits 1 = 8 data bits RS232$status equ XxD$config+1 ; bit 7, 1=send data, 0=no data ; bit 6, 1=sending data ; bit 5, 1=recv que active ; bit 4, 1=parity error ; bit 3, 1=framing error ; bit 2, 1=recv over run (no used) ; bit 1, 1=receiving data ; bit 0, 1=Data byte ready xmit$data equ RS232$status+1 ; data byte to send recv$data equ xmit$data+1 ; received data byte ; ; The following equates are used by the interrupt driven keyboard handler ; int$rate equ recv$data+1 ; ; 1st byte is a pointer into table, 2nd to 12th byte represent ; the keyboards current state (active low), NOTE: only ; current if key$buffer is not full ; key$scan$tbl equ int$rate+1 ; ; keyboard roll over buffer ; key$buf$size equ 8*2 ; must be an even number of bytes key$get$ptr equ key$scan$tbl+12 key$put$ptr equ key$get$ptr+2 key$buffer equ key$put$ptr+2 ; ; software UART recv buffer ; RxD$buf$size equ 64 RxD$buf$count equ key$buffer+key$buf$size RxD$buf$put equ RxD$buf$count+1 RxD$buf$get equ RxD$buf$put+1 RxD$buffer equ RxD$buf$get+1 tick$vol equ RxD$buffer+RxD$buf$size ; equ tick$vol+1 INT$vector equ 0FDFDh ;; contains a JMP int$handler ; (in common) page ;===> 40 column misc parm temp$1 equ BANK$parm$blk ;; @off40 equ temp$1+2 ;; cur$offset equ @off40 ;; old$offset equ @off40+2 ;; prt$flg equ old$offset+1 ;; flash$pos equ prt$flg+1 ;; ; ;===> 40 column position and color storage paint$size equ flash$pos+2 ;; char$adr$40 equ paint$size+1 ;; char$col$40 equ char$adr$40+2 ;; char$row$40 equ char$col$40+1 ;; attr$40 equ char$row$40+1 ;; bg$color$40 equ attr$40+1 ;; bd$color$40 equ bg$color$40+1 ;; rev$40 equ bd$color$40+1 ;; ; ;===> 80 column position and color storage char$adr equ rev$40+1 ;; char$col equ char$adr+2 ;; char$row equ char$col+1 ;; current$atr equ char$row+1 ;; bg$color$80 equ current$atr+1 ;; char$color$80 equ bg$color$80+1 ;; ; ROM uses localtions above this point ; ;===> Emulation parameters parm$base equ char$color$80+1 parm$area$80 equ parm$base+2 ; ds 2 ; 80 column exec$adr ; ds 1 ; 80 column row # parm$area$40 equ parm$area$80+3 ; ds 2 ; 40 column exec$adr ; ds 1 ; 40 column row # buffer$80$col equ parm$area$40+3 ; ;===> CXIO parameters ; int$count not used by releases past 10 Oct 85 int$count equ buffer$80$col+40*2 ; one added every 1/60th sec key$buf equ int$count+1 ; ;===> CXKEYS parameters key$down$tbl equ key$buf+1 ; not used any more (int code) ;;;;; free space above, new interrupt driven code does not require this space ; control$keys equ key$down$tbl+11*2 ; byte, not used any more (int code) commodore$mode equ key$down$tbl+11*2 msgptr equ commodore$mode+1 offset equ msgptr+2 cur$pos equ offset+1 string$index equ cur$pos+1 ; 1st release end (3 June 85) sys$freq equ string$index+1 ; -1=50Hz, 0=60Hz ; 2nd release end (1 Aug 85) ; equ sys$freq+1 page ;===> temp ROM boot data storage blk$ptr$cnt equ 32 load$count equ boot$parm ; number of 128 byte blocks to load ld$blk$ptr equ load$count+2 ; current sector dma pointer blk$unld$ptr equ ld$blk$ptr+2 ; read memory block (1k,2K) pointer block$size equ blk$unld$ptr+2 ; block size (1K=32 or 2K=64) block$end equ block$size+1 ; allow 48K cpm.sys to load block$ptrs equ block$end+2 ; end of block load buffer (+1K or +2K) info$buffer equ block$ptrs+blk$ptr$cnt ; CPM3.sys load adr's and counts ext$num equ info$buffer+12 ; CPM3.SYS current ext # retry equ ext$num+1 boot$stack equ retry+1+64 ; allow 64 bytes of stack ; equ boot$stack ;===> special equates used by CXKEY special equ 00010111b SF$exit equ 001h ; RETURN KEY SF$insert equ 028h ; PLUS KEY SF$delete equ 02Bh ; MINUS KEY alpha$toggle equ 03Dh ; commodore key alt$key equ 050h ; alterant key SF$left equ 055h ; left arrow key lf$arrow equ 055h ; left arrow key SF$right equ 056h ; right arrow key rt$arrow equ 056h ; right arrow key buff$large equ 25 buff$small equ 7 buff$pos equ 7 page ;===> External RS232 interface controls rxd$6551 equ USART+0 ; read txd$6551 equ USART+0 ; write status$6551 equ USART+1 ; read reset$6551 equ USART+1 ; write command$6551 equ USART+2 ; read/write control$6551 equ USART+3 ; read/write txrdy equ 10h rxrdy equ 08h cmd$init equ 0bh ; no parity, enable txd + rxd, interrupts off cntr$init$19200 equ 1Fh ; 1 stop, 8 bits, 19200 baud cntr$init$9600 equ 1Eh ; 1 stop, 8 bits, 9600 baud (internal) cntr$init$600 equ 017h ; 600 baud ;===> memory management loactions mmu$start equ MMU conf$reg equ MMU ; 3eh conf$reg$1 equ MMU+1 ; 3fh conf$reg$2 equ MMU+2 ; 7fh conf$reg$3 equ MMU+3 ; 3eh conf$reg$4 equ MMU+4 ; 7eh mode$reg equ MMU+5 ; b1h ram$reg equ MMU+6 ; 0bh 16K top Common page$0$l equ MMU+7 ; 00h page$0$h equ MMU+8 ; 01h page$1$l equ MMU+9 ; 01h page$1$h equ MMU+10 ; 01h mmu$version equ MMU+11 ; ??h enable$C64 equ 11110001b ; FS=0 z80$off equ 10110001b ; value to be write to enable 8502 z80$on equ 10110000b fast$rd$en equ Z80$on+0 ; fast serial read fast$wr$en equ Z80$on+8 ; fast serial write common$4K equ 09h ; top 4K common common$8K equ 0ah ; top 8K common common$16K equ 0bh ; top 16K common ;===> preconfiguration maps force$map equ 0ff00h bank$0 equ 0ff01h ; 3fh bank$1 equ 0ff02h ; 7fh io equ 0ff03h ; 3eh io$0 equ 0ff03h ; 3eh  io$1 equ 0ff04h ; 7eh page ;===> 80 column display equates DS$index$reg equ DS8563 DS$status$reg equ DS8563 DS$data$reg equ DS8563+1 ;===> register pointers DS$cursor$high equ 14 DS$cursor$low equ 15 DS$rw$ptr$high equ 18 DS$rw$ptr$low equ 19 DS$rw$data equ 31 DS$color equ 26 ;===> status bits DS$ready equ 80h DS$lt$pen equ 40h ;===> display memory layout (16K) 0-3fffh DS$screen equ 0000h DS$attribute equ 0800h DS$char$def equ 2000h ; ;===> VIC equates ; vic colors black equ 0 white equ 1 red equ 2 cyan equ 3 purple equ 4 green equ 5 blue equ 6 yellow equ 7 orange equ 8 brown equ 9 lt$red equ 10 dark$grey equ 11 med$gray equ 12 lt$green equ 13 lt$blue equ 14 lt$grey equ 15 page RM$status equ RAM$dsk$base ;read only register ; bit 7 Interrupt pending if 1 ; 6 Transfer complete if 1 ; 5 Block verify error if 1 ; note: bits 5-7 are cleared when read ; 4 128K if 0, 512K if 1 ; 3-0 Version # ; RM$command equ RAM$dsk$base+1 ;r/w ; bit 7 execute per current config. if set ; 6 reserved ; 5 enable auto reload if set (restores all register to ; value before command was done, else point to ; next byte to read/write.) ; 4 disable FF00 decode if set (do operation after command writen) ; 3,2 reserved ; 1,0 00 = transfer C128 --> Ram Disk ; 01 = Transfer C128 <-- Ram Disk ; 10 = swap C128 <-> Ram Disk ; 11 = Verify C128 = Ram Disk ; RM$128$low equ RAM$dsk$base+2 ;r/w ; bits 0 to 7 of C128 address ; RM$128$mid equ RAM$dsk$base+3 ;r/w ; bits 8 to 15 of the C128 address ; RM$ext$low equ RAM$dsk$base+4 ;r/w ; bits 0 to 7 of Ram Disk address ; RM$ext$mid equ RAM$dsk$base+5 ;r/w ; bits 8 to 15 of Ram Disk address ; RM$ext$hi equ RAM$dsk$base+6 ;r/w ; bit 16 of Ram Disk address if 128K version ; bits 16 to 18 of Ram Disk address if 512K version ; RM$count$low equ RAM$dsk$base+7 ;r/w ; low byte transfer count (bits 0-7) ; RM$count$hi equ RAM$dsk$base+8 ;r/w ; hi byte transfer count (bits 8-15) ; RM$intr$mask equ RAM$dsk$base+9 ;r/w ; bit 7 1=enable chip interrupts ; 6 1=enable end of block interrupts ; 5 1=enable verify error interrupts ; RM$control equ RAM$dsk$base+10 ;r/w ; bit 7,6 00 Increment both addresses (default) ; 01 Fix expansion address ; 10 Fix C128 address ; 11 Fix both addresses ; page ;===> CIA equates Data$a equ 00h Data$b equ 01h Data$dir$a equ 02h Data$dir$b equ 03h timer$a$low equ 04h timer$a$high equ 05h timer$b$low equ 06h timer$b$high equ 07h tod$sec$60 equ 08h tod$sec equ 09h tod$min equ 0ah tod$hrs equ 0bh sync$data equ 0ch int$ctrl equ 0dh cia$ctrl$a equ 0eh cia$ctrl$b equ 0fh CIA$hours equ CIA1+tod$hrs key$row equ CIA1+Data$a ; output key$col equ CIA1+Data$b ; input VIC$key$row equ 0d02fh ; output data$hi equ 4 ; RS232 data line HI data$low equ 0 ; RS232 data line LOW lf$shift$key equ 80h rt$shift$key equ 10h commodore$key equ 20h control$key equ 04h type$lower equ 0 type$upper equ 1 type$shift equ 2 type$cntrl equ 3 type$field equ 00000011b page bnk1 equ 1 page0 equ 0 page1 equ 1 MMU$tbl$M macro db 3fh,3fh,7fh,3eh,7eh ; config reg's db z80$on,common$8K ; mode & mem db page0,bnk1,page1,bnk1 ; page reg's endm page ; ; ROM functions ; TJMP macro x rst 2 ! db x endm TCALL macro x mvi l,x ! rst 4 endm RJMP macro x rst 3 ! db x endm RCALL macro x mvi l,x ! rst 5 endm FR$40 equ 2 ; offset to 40 column ROM functions FR$wr$char equ 00h ; D=char auto advance FR$cursor$pos equ 04h ; B=row, C=column FR$cursor$up equ 08h FR$cursor$down equ 0Ch FR$cursor$left equ 10h FR$cursor$rt equ 14h FR$do$cr equ 18h FR$CEL equ 1Ch FR$CES equ 20h FR$char$ins equ 24h FR$char$del equ 28h FR$line$ins equ 2Ch FR$line$del equ 30h FR$color equ 34h ; B=color FR$attr equ 38h ; B=bit to set/clear, C=bit value FR$rd$chr$atr equ 3Ch ; in D=row, E=col ; out H=row, L=col, B=char, C=attr(real) FR$wr$chr$atr equ 40h ; in D=row, E=col, B=char, C=attr(real) ; out H=row, L=col FR$rd$color equ 44h ;FR$wr$color equ 48h ; equ 4Ch page ; FR$trk$sect equ 50h FR$check$CBM equ 52h FR$bell equ 54h ; equ 56h ; equ 58h ; equ 5Ah ; equ 5Ch ; equ 5Eh FR$trk$40 equ 60h FR$set$cur$40 equ 62h FR$line$paint equ 64h FR$screen$paint equ 66h FR$prt$msg$both equ 68h FR$prt$de$both equ 6Ah FR$update$it equ 6Ch ; equ 6Eh FR$ASCII$to$pet equ 70h FR$cur$adr$40 equ 72h FR$cur$adr$80 equ 74h FR$look$color equ 76h ; equ 78h FR$blk$fill equ 7Ah ; HL passed on the stack FR$blk$move equ 7Ch ; " FR$char$inst equ 7Eh ; " ; ; fixed ROM locations ; R$cmp$hl$de equ 100h-6 R$write$memory equ 180h+0 R$read$memory equ 180h+3 R$set$update$adr equ 180h+6 R$wait equ 180h+9 R$status$color$tbl equ 1000h-246-16 R$color$convert$tbl equ 1000h-230-16 page ; ; Disk type byte definition ; ; bit 7 0=GCR, 1=MFM ; ; if bit 7 is 1 (MFM) ; 6 C0=0, C1=1 (side 2 #, 0 to (n/2)-1 or n/2 to n-1) ; 5,4 00=128, 01=256, 10=512, 11=1024 byte/sector ; 3,2,1 disk type (MFM) ; 0 starting sector # ( 0 or 1) ; ; if bit 7 is 0 (GCR) ; 6 unused (set to 0) ; 5,4 always 01 (256 byte sectors) ; 3,2,1 disk type (GCR) ; Type0 = none, set track and sector as passed ; Type1 = C64 type disk ; Type2 = C128 type disk ; 0 unused (set to 0) MFM equ 1*128 C0 equ 0*64 ; 2nd side start at begining C1 equ 1*64 ; 2nd side continues from first C1$bit equ 6 Type0 equ 0*2 ; (MFM) top, bottom then next track ; (TRK# 0 to (34 or 39)) Type1 equ 1*2 ; (MFM) top (trk 0 even), bottom (trk 1 odd) ; (TRK# 0 to (69 or 79)) Type2 equ 2*2 ; (MFM) top TRK# 0 to 39, bottom TRK# 40 to 79 ; (TRK# on back start at 39 and go to 0) Type6 equ 6*2 Type7 equ 7*2 ; (MFM) pass the byte values supplied in @trk ; and @sect TypeX equ 7*2 S0 equ 0*1 ; start at sector 0 S1 equ 1*1 ; start at sector 1 S128 equ 0*16 S256 equ 1*16 S512 equ 2*16 S1024 equ 3*16  ; dsk$none equ Type0+S256 ; access to any sector on the disk dsk$c64 equ Type1+S256 dsk$c128 equ Type2+S256 dir$track equ 18 ; C64 disk dir track page ; ; 6510 commands ; vic$reset equ -1 ; reboot C128 vic$init equ 0 ; initilize the bios8502 vic$rd equ 1 ; read one sector of data (256 bytes) vic$wr equ 2 ; write one sector of data vic$rdF equ 3 ; set-up for fast read (many sectors) vic$wrF equ 4 ; set-up for fast write vic$test equ 5 ; test current disk in drive vic$query equ 6 ; get start sectors and #sector/trk vic$prt equ 7 ; print data character vic$frmt equ 8 ; format a disk (1541) vic$user$fun equ 9 vic$RM$rd equ 10 ; RAM disk read vic$RM$wr equ 11 ; RAM disk write ; ; control charactors ; eom equ 00h bell equ 07h bs equ 08h lf equ 0ah cr equ 0dh xon equ 11h xoff equ 13h esc equ 1bh CLSB8 FONN CLSB9 FON[ #CLSI10 FON\) 'CLSI6 FONҢ  ͫCopyright (C) 1985 BORLAND IncBADM-31ore 128-40 colP= *ERT)"2( ~7#~=  oͦlԅ!!"~#(}:$= +*!6!*!!:(2!6:(>2!!!:O::O:!*! !45(! +/ 0y0( d!k6!{6``o&  :(͠|(  *"x2y( >28!"9!! og2"">~22!:05+:!Co&ͦͣ} [ (!e|ͧA8Q0G: x@!\w# (̓ ?(*( .( x_. _!h6# (?( *( ̓( w#>?> w#ͧ 8 !ɿ .,;:=?*[]<>{}a{ |͵};Ɛ'@'7||}>2Ͱ*Bک  "og"2>2! ""*B"[Rv*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#Eͻw}8( RB0 >( RrRR!+ ͱ R!+ ͱ s!+ ͱ s!+ ͱ s!# ͱ s!+ ͱ T]KB!z> S>))0 = | |́́DMgo>jB0 7?= H͓<z5b)b<z {0Gɯgo||}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'd } * W _}8(8J`9{T]=o`9y *  >( ͂ ͭ͘ }>( x‰ }} ˸T}ٕ(0D={ ,= ( ͓ 0%| , 7 ?(8ͭ x ͇ - s 8˸x ͐  ,-xG}s }مN 9s .>#n0͓ | = - nx ͈ ,-(-˸G,-s }ٕ?N 9.> 8ͭ ?= u+-(>͇ 0ͭ ͇ 8 ?x ͈ , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx( ?}ٽ }ցs <(s 7| = |٤g{٣_z٢Wy١Ox٠G| ͭ ͂ }x>( ͭ}ƀ/ƀo  -͂ }0͏-͂ ͏,}l˸ 8 5 ͘ x( - 8͂ - 8,͂ }l8;*!͘ ! >5ͭ͘ ͘ ͭ---  ,,,-xGg?+2n*8t z~,->( x( ͙}. ͇͂ , ! >5,ͣ- o&0% ,͘  }gs }؉}颋.:}8c~I$I~L*ͣٷx˸ }0G,<} ,-(-͂ !>J0 ͙͘ o8 ͇ >( m.`1pF,t6|!wS<.z}[|%FXc~ur1}͇ٯx(<˸ 8 !~J 0/O!>t 8 =  o t͘ ͇ /o 0 ͏-͂ OT0 j oD,:j !I}袋.}8c~I$I~L! >ͭ͘ JØ oo ͘ = ͇ nf^VNF!DLT\I!!53!r1!͓!> x #-= o˸x͇(- }(x>8({ ,{ `iÄ!>( |s |́>)=|(DMbo˸88x(0 8> ́x(>-{(ay( z(>. ( {>E>+|(|Dg>-|/ 0:p# ~# +>0w#,-  60#~˸}րogM| .({ = ~> x0w#xG%͈ %͈ ZJDM%͈ = _~65+~hìx-Sx9?+{Η@}|{ { gZJDM0| ,7}o˸@ #yO!@9i&@  #@w#@/w#@w#!9! E9!!9~(+Fͻ!"9!(#>2*"| >"2:( ͷ *w*6 !\$![ (ͧ( #:~CONTRMKBDLSTCAUXUSR>2j:*ˮ~1:*:(@q##p[* :(  ~* < >26"!"""~>2""v>2>"!"ˮ(!~8>~O6~*"w(6(2(-()(6 (8 0 :(* y(~#+ (( 66 #6 #"*: y~o p .##~ͻ(.6w4._~ =*##55= *[R8*~#"= ͣ}== ͯ}͵}*#w+#~+>*~('l!0(ˮ]l!8ˮ!]~-#8~>27lˮw>O%7̄s #r%ͤ7̐ l ( (ˮ ql(ˮ ( l ˮ*O:~ ##~._q4((=ʦ==ʩ=ʬò*:4^q*##~6ͻ>2}*|(̈́|( ̈́6-#[RM8( G> A~#*(C! !TRUEFALSE!9N#Z~#( G~#> >    "~(lѻ(( !0 (ˮ!!>2S{:1:*6##ww#w$w#w:  ##N#F*B>2w#w#[s#r> "~ͯ*-w#ww##> ͯÂ""~>2:[R0 *4#4>2:[R> *4 #4(> >22*f(/˦:G(##~++ :O x yD!ͻ Q*:G(##~._.͛g<]=<͛*##w ͯ +4 #4x>>2:G("ͯ"*nˮ*0 S[ѷR8@* N#F#s#r- 0})jS\*##w+ N#FB ͯr+s>2!T]>)j)0 0= ^R!#^*^#V#N#F#^#V>2ͱ:1:*6 #-Nw#Fwq#p#6#w#w#w"~Â>">!DM!":*B:!>(>2>">!"2"~ʱ*w#wx(9* :O *-4 #4!*4 #4 *-N#Fq#pV+^Bq#pS[ѷR'* s#r$ s#rM <?*M!\  <( !\$>2>2M:>!(* \$\<(!4: [1ð\!(7"~> 2"S"Ns#FrB(Z#\: \<(?*"}K\! !*}#"}! x \* *>* 2""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* vKB!1>( ~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6#L*L*!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#V""6#>O"w2x2*"!G"" 'z*"*>2"*"!G"""!\*: Os!~6go(\R*s#r_2x( s x(T]DMx(R0 U(͞O/o&9q# (!>F0#( ~ ( #]( ~ ( (#}(  i&T-a%ã}ͧo*!~6o&|:2!2}:__{ѯ2*|KB " z ^C User break+=  I/O Run-time error {͵, PC=*ͰNot enough memory Program aborted :m'1!e!5M:>4"u}2w*w&}2e*u"g!2!e"a}2c*c&}2Q*a"S!2!Qo&}2d*d&"L}2N*N&}2<*L">!2!<"O*O}2;!}2+!}2,*;&"1!2!+}2(")K):(y"Kx2*&}2*&}2!%*&! }2*&"!"!2!"*!R!s}2! }2*&"!"!2!"*!R!s"}2}2*&!F͹E"! *!! *&!! *&!! !!"ޞ}2}2*&!F͹E)#! *ޞ!! *&!! *&!!!!!>!>;!>!}2>!">*>!̀Ee##! !!q>!>;q*>&Eʤ#!q>q !q>!q>^p ô#!q>p !}2>!q>!>*>!~!ͻ !q>ͱ }2p>!>*>+*p>&s*>!">*>!`E$R#!">}2g>*g>&*>!`͹}oE_$!>*>+!s*>!">R#}2]>*]>&!@*]>&![}oEʢ$*]>&! }2^>$%*]>&!*]>&!}oE$*]>&!R}2^>$%*]>&!*]>&!~*]>&!}o}oE%! }2^>$%*]>&}2^>*^>&}2T>?͜ͻDName FType Size St.Trk St.Sec RecLen SS.Trk SS.Sec ͜ͻD---------------- ----- ---- ------ ------ ------ ------ ------ !"J=!"H=*T>&!*J=*H=!L=̀"!L=!n&"J=!L=!n&"H=!!gz )"D=! *D="B=!L=*B=!n&!͓E)!!gzʗ&"F=͜!L=*B=*F=n&c$# *F=#f&͜! # !L=*B=!n&"F=*F=!|g}o!̀E&͜!*# '*F=!@|g}o!͓E '͜!># '͜! # *F=!|g}oR?'͜ͻDEL ô'RY'͜ͻSEQ ô'Rs'͜ͻPRG ô'R'͜ͻUSR ô'R§'͜ͻREL ô'͜ͻ??? ͜ͻ  !L=*B=!n&!L=*B=!n&!"F=*F=͜!' ͜ͻ !L=*B=!n&!'ͻ !L=*B=!n&!' !L=*B=!n&!|g}o!͓Eʃ(͜ )͜ͻ !L=*B=!n&!'ͻ  !L=*B=!n&͜!'ͻ !L=*B=!n&!' ͜ *D=#%&*J=!*J=!F}oE%!-=}2>="?=!!-=;ͤgzʰ)}2$=*?=*>=&! *$=&!n&c$!-=*$=&n&͓Eʥ)!}2A=ú)*$=&#Q)!}2A=þ)÷)*A=&" =" ="=}2=!=*=&!!*=s!* =s*=n&* =n&* =̀"* =!n&*=s* =!n&* =s!!gzn*"=* =*=!=;+)Ee**=}2#=Ë**=#<**=n&!̀E)!}2#=Ï*È**#=&}2<!<!<}2=!<;*=&!*:;>*:͜ !}2m:͜ͻLetter of CBM drive:  ͠}oE?/0/!ͪ!n:E *n:&͜# *n:&!ZEʃ/*n:&! R}2n:*n:&!A*n:&!E}oE/͜ͻ$You must choose drive A,B,C,D,or E. /!}2m:*m:&E/*n:&}2:!}2m:͜ͻLetter of CP/M drive:  ͠}oE+00!ͪ!n:E *n:&͜# *n:&!ZEo0*n:&! R}2n:*n:&!A*n:&!E}o*n:&!M͓}oE0͜ͻ&You must choose drive A,B,C,D,E,or M. )1*n:&*:&̀E"1͜ͻ#You must choose a different drive. )1!}2m:*m:&E/*n:&}2:?͜ͻRDCBM Version 2.0 ͜ͻ+Commodore DOS To CP/M File Transfer Program ͜ͻ*by Rob Tillotson ...ihnp4!killer!sentinel ͜ͻ(Copyright (C) 1986 TurboPenguin Software ͜ ͜ͻ [B] Binary CBM -> CP/M Copy ͜ͻ [D] Directory Of CBM Disk ͜ͻ [S] Select Drives For Copy ͜ͻ) [T] Text CBM -> CP/M Copy (fixes ASCII) ͜ͻ& [V] View CBM Text File (fixes ASCII) ͜ͻ [X] Exit To CP/M ͜ ͜ͻCBM Disk In Drive *:&#ͻ:, CP/M Disk In *:&#!:# ͜ ͜ͻSelect Function: ͜ͻCBM File Name:  !:͏ !:;ͤ!̀E33!!:;t,.͜ͻCBM File Name:  !:͏ !:;ͤ!̀E4W4!:a.!:;ͤ!̀E54W4*:&!AR!:;!:;!͕*͜ͻCBM File Name:  !:͏ !:;ͤ!̀Eʘ44!:a.!:;ͤ!̀Eʸ44*:&!AR!:;!:;!͕*!A}2:!M}2:!}2:*:&Eʛ5=1͠}oE 54!ͪ!:E *:&͜# *:&dRG5!*%.Ø5vRW5̈́3Ø5tRg53Ø5bRw5X4Ø5sR‡5/Ø5xR˜5!}2:4 &͜# *:&dRd!*%.85vRv̈́3O5tRt3_5bRbX4o5sRsCLASB8 FONx6 CLASB9 FONq6 $#CLASI10 FONr'CLASI8 FONx6 : CLASI9 FONp6 !ROMNL10 FON8v 5$ROMNL12 FONE{ t0FONTCONVEXEMY P RDCBM A Commodore To CP/M File Copy Utility By Rob Tillotson Version 2.0 - Jan. 22, 1987 Copyright 1986 by TurboPenguin Software This program is a general purpose file copier, which copies from a Commodore DOS format disk to a CP/M disk. It is designed to be faster and more convenient to use than any of the existing CBM->CP/M copiers. It uses burst mode on 1571 drives, and can write to the 17xx RAM expander or to a 1571 onto any format disk the drive supports. It does not require you to exit from CP/M to use it, as it is a CP/M transient utility. Version 2.0 corrects a serious bug in version 1.0, and as a side benefit is smaller and faster. Version 1.0 stripped a few hundred bytes from the beginning of binary files when copied, and also had problems handling files larger than the memory buffer. Version 2.0 corrects both of these problems, and has been completely tested on both types of floppy drive and the RAM expander, and properly performs binary and text copies on one drive or two. Hardware requirements are as follows: o A Commodore 128 computer o At least one 1541 or 1571 disk drive (1571 recommended) o Optional but recommended 1700 or 1750 RAM expansion The program is set up to operate with two drives, and in fact this decreased the code size substantially. However, it works reasonably well with one floppy if you select drive E as the second drive. RDCBM expects to find a Commodore DOS disk in one drive, and a CP/M disk in the other. The Commodore drive must be a real floppy, either 1571 or 1541. The CP/M drive may be a physical drive, or a pseudo- drive such as E: or M: if you have a RAM expander. The program defaults to Commodore disk in A: and CP/M disk in M:; these may be changed at the main menu. When copying, RDCBM uses an internal 24k buffer to hold file data, to cut down on the amount of disk swapping necessary on a one drive system, and to reduce the number of file operations performed on the CP/M disk. The net effect of this is that when you copy to drive E:, you only have to swap disks every 24k or when the file is complete. To use this program, place RDCBM.COM on any active drive, and type RDCBM. The program will load and a menu will be displayed, along with the letters of the selected drives. At this time, you should place the Commodore disk in the drive you wish to copy from. If you do not like the default drive choices, use the P option to change them. To select an option, type it's letter in upper or lower case alone at the prompt and hit return. The options are: [B] Binary CBM -> CP/M Copy Copies a BINARY file from the Commodore disk to the CP/M disk. No conversions are done. [D] Directory of CBM Disk Displays the directory of the Commodore disk, in a reasonably Commodore-like format, along with the file locations on disk and side sector locations for REL files. [S] Select Drives Change the drives used to copy from and to. Simply type the letter of the drive and hit return when you are prompted. [T] Text CBM -> CP/M Copy Copy a TEXT file from the Commodore disk to the CP/M disk. The file is converted from Commodore-ASCII to true ASCII, and linefeeds are inserted after carriage returns. Use this on text files. [V] View CBM Text File Similar to [T], but displays the file instead of copying it. [X] - Exit to CP/M. Entomology ---------- This is the second version of RDCBM. Version 1.0 was hopelessly buggy, and it's amazing why nobody (myself included) noticed the problems before now. Version 1.0 does not properly copy binary files, and has a few other problems, mostly due to the compiler's run-time library. Now, the program has been translated to Turbo Pascal, and is smaller and faster. And it DOES copy binary files. The only thing missing is printer/AUX support, due to the change in compilers. Put version 1.0 in the bit bucket forever. Other than that, the same features are still present. First, this program ignores the Commodore filetype of a file. This seems to me to be a benefit, not a drawback. If you attempt to copy a non- sequentially-structured file, the program will simply copy the chain starting with the pointer in the directory. Basically, this means that if you copy anything OTHER than a PRG or SEQ file you may get interesting results. Copying a REL file will yield the data portion of the file, neatly blocked off into fixed length records (that is, assuming you do a binary copy). Copying a GEOS file will give you either the file contents, if it's structure is Sequential, or one block full of useless garbage if the files structure is VLIR. And copying any other odd type of file you have will produce equally strange results. This brings up the second "feature"... this program does not handle GEOS files well. Since GEOS will soon be available on the 128, and since so many people use it on a 64 or a 128 in 64 mode, I consider this an important drawback. I plan to put GEOS capability in a separate program at a later date. Finally, this program doesn't write Commodore files. That capability will be available in a later version. . Finally, this program doesnROMNL7 FON 9SANS12 FON OJ-SANS20 FONs lSANS36 FONہ 1CLAS12 FONr7RMNF7 FONVJ XCLASB12 FONϋrQ3RMNF9 FONV+ RMNF10 FONzo  PFONT EXEbk"SAMPLE TIFÁE/|HP PRF 7>,͢!!9s!! N,}2G!d!^!!ͱ!9:Go&0S!vͽ!a,*%"XZ|ʝ*,G*%"PG|„!*,G",GÍ!!9s!9^*,G͑c!9~ʻ!F! !Y/!*XZa,s!"JZ!F! !!9s#r!9~#fo#s#r!9^#V!9~#foʬ!9^#V)!9~#fo^#V^!-ʇ!9^#V)!9~#fo^#V#^ =q!C}2LZÄ!H}2LZÄ!X}2LZÄ CSH]Xgé!9^#V)!9~#fo^#V^ ="JZ*JZ!F*JZ? !F! ? !A*JZ"JZ!!9s#r!F!!ZZ:ZZo& ="JZ*JZ,*JZ?!F! !"JZ*JZ!!V,"RGͨ!!*JZ!! p! 93!JV*2G! !G*G*2G) !*GGs!G"FVO!!*RG!! p! 9d ʜ!ZZ;*FVOÙ!}2OZ*FVVw!TGM=s=!U!ͱ!9!!U"XG!!*JZ!! p! 9*PG"G*G*@G *NG|ʉ*NG+"NG*>G*G"GÚ*nZ*G"G!"nZ*PG*,G*>G*GV!!*RG!! p! 9*XG*G*PG!*PG!9!!*JZ!! p! 9*PG"G*@G"@G*@G͑;!"nZ"NG*NG|_*nZ|_!!*RG!! p! 9*XG*G*PG!*PG!9*XGͮ"!TGM=@͑'Î:OZo&|¿!F!" !}2OZÎ!!*JZ!! p! 9*XZ"G*G*@G *NG|*NG+"NG*>G*G"G*@G"@G*@G͑6!"NG*NG|!!*RG!! p! 9*XZ"FVOÎ!G"FVOÎ i:OZo&|!!*RG!! p! 9*RG!V, Read MS-DOS diskettes under CP/M & CP/M+ %s Version %s - %s Copyright (C)1984 Bob Alverson, (C)1985 John Hastwell-Batten, (C)1986 Frank Prindle2.33C31st October 1986Exact file lengths will be preserved in CP/M directory Insufficient memory to run this program!Drive of MS-DOS diskette: Drive spec error! Copying %s (%ld bytes) wb File not found ͢~!9!! !9^͙͑!9s#r!9^#V!G^"G!9^#V!.G^"2G!9^#V!G^"G!9^#V)4G^#V"G*2G*Gͽ@s=!TG*BM=`=͋=>@"NG*>Gͽ@s=*BM=͋=3?@"nZ*B ^!͑ʖ*@G|! !}2OZ!!"NG*B ^!͑ʴ!}2OZ!!U*B! *B![Go&zo&|-}|>o&|o&z2eCF:eC||Q/g}/o#z_/W{/__DM!>2dC))r#}o|gҊ :dC=2dCj}:dC=2dCj}DM!>))ҩ =¡}}/o|/g#}||g}o{_|j|7g}o{_)}}o|gN#F# N#F#z{##^#VBK^#Vz@#y:###(#x5#~#fo}|>?o&}|>o&{_|g}oj|g}o~# x!9fC~#š!|7͢!F"lC!9!9^#V!%͢! 9^#V"lC!9!9^#V!%͢*lC!9^#V? ͢!FDM`i~A`i DMGG>!!9^#V#^!+!9^#V^9|s!v!!9^#V/! s!ʗ!L|ʨ!ë!!9^#V/! s!!L|!!!9^#V/! s! !!F=s=! ^k9!9L!"MZ! rewa/!! s!! s#r!`is#r! s#r! s#r`i͢!9N#F!!9s#rã!9~#fo#s#r!9^#V!9~#fo!9^#V+|!9^#V !9^#V`i#DM+sÔ!9^#V͢! 9N#F!9^#V!9~#fo͙!A#Uu!9^#V`i#DM+^"r!:!9^#V͢! 9^#VBK!Fuʻ ʻ`i#DM+sÌ!`is`i! 9~#fo!! 9^#V͢! 9^#V!9~#fo+s#r!E!9^#VuDME`i#+s`i E!u`il! 9~#fol!! 9^#V͢! 9N#F ͑æ`i~#fo+s#r!Á  ͢! 9N#F`i~!F`i#DM+^? !!F! ? ͢! 9N#F`i~; !9^#V`i#DM+^? 8 ! !͢! 9N#F!9^#V!PY͑DM`i ʂ ! "ʂ !"͢! 9^#V DM¿ ! 9^#V  !PY͢! 9N#F! ^#V`i^#VGʗ!! ^!͑!!!`in&͑s`i~#-!͔$! ^#V! ^#V! ^]3!|f!!i!!`in&s!! ^#V`is#r! s#r`i~#fo#s#r+^!͑͢!F!9^#V"͢! 9N#F!9^#V"!!!9^#V`ib""!`i͢!9N#F! ^#V`i^#VGL"! 9^#V!͑M#! 9^#V`i~#fo#s#r+s!͑͢!!9^#VM#͢!FDM`iGUʭ"`i DMͮ"Í"͢!9N#F!!9s#r`i~;#! ^!͑"!M#!9s#r! ^N1!9~#fos#r! ^!͑;#*#G! ^#Vs#r! ^#V"#G!! s!9^#V͢! 9N#F! ^!͑ʷ#! ^#V`i^#V! ^#V! ^͙6ʷ#!`in&s!!9^#V!#!`in&͑s!`is#r! s#r!`i~#$͔$! ^#V!:$!!9! ^͙6ž#!9^#V! ^#V`is#r! ^#V! ^#V! s#r!`in&s!9^#V`i~#fo#s#r+s!͑͢!9N#F! ^#V!ʿ$`i! s#r*#G|$*#G!9s#r*#G^#V"#G%! ^#V*%!9s#rz%!! s#rð$!`in&s!9^#V! s#r͢*pC|E%!(-"nC"pC*pCDM! 9^#V*pC"pCPYUj%`i"pC!*pC*nCVʩ%*pC*nC͑! 9s#r(-a%! 9^#V*nC"nC`i͢! 9^#V"rC!9!9^#V!%%!*rCs͢! 9^#V*rC#"rC+s!͑͢!N9N#F!P9^#V#+^z +%+!!9s!!D9s#r! !B9s#r!!@9s#rn&-ʄ&!!D9s#r#+^0ʛ&!0!B9s#r!!>9s#r#+^!0&9&!>9^#V! ͙!>9s#ræ&.E'!!@9s#r#+^!0E'9E'!@9^#V! ͙!@9s#r'lʅ'#+^!:9!T9~#fos#rM=`=$(dʷ'!:9!T9~#fo##s#r++^#Vͽ@`=$(e'f'g(!9!T9~#fos#r@@$(!:9!T9~#fo##s#r++^#Vͯ@`=)!9!!>9M=s=p+!9!49s#r)!:9M=8=ͅ@ʣ(!9! !>9M=ͮ=s=+!9!49s#r!-!69~#fo+s#rs(!9! !>9M=s=+!9!49s#r)!9! !>9M=s=p+!9!49s#r)!9!!>9M=s=p+!9!49s#r)!:9M=@!49s#r;!89s#r *eI)!L)!!B9^#V!c)!k)!B9^#V!9! 9@@@!9! 9!49s#r;!89s#r!!@9s#r *!:9M=@!9!69s#rs) o*(dP(u(x(s)e7)f7)c))!9!49~#fo!89s#r!89^#V!@9~#fo0*!@9^#V!89s#r!D9~#k*!>9~#fo+s#r#!89~#fok*!B9^#V`i͡:*!!69s#rÈ*!69~#fo#s#r!49^#V~*!69^#V!@9~#fo*!49~#fo#s#r+^`i͡y*!D9~#*!>9~#fo+s#r#!89~#fo*! `i͡* +`i͡&͢!9N#F!9^#V`iͽ@s=!9M=͋=3?@tC^+s! 9`iͽ@͟=M=>`=;=$+͢!9N#F!9^#V! 9M=8=ͅ@&,! 9M=@͑! 9!9M=8=Ͱ>8=5>`=`iͽ@s=!9M=͋=3?@)tC^+s! 9`iͽ@͟=M=>`=!9M=s=+!9*O-E,͊Y,͊*fCDM*hCo&͊w,o&͊*fC*+++*hCDM*jC!9N#F#^#Vkb6#> 6 #=¢,>6#=«, : >, A-[,@,a-{-`w# .,-,-w#,{o|g --w#-!!|a{ !9^#V*C!9}|J-*C"C|!͢!!!CU;!:o&͑Cs!4/"C!CDM!"CD*CD!/`i^! ¶-`i^! ʾ-`i#DMÚ-`i^z!/`i^!>-!-`i^!<.!`i#DM^! .`i^! .-`i`i#DM~R.`i^! @.`i^! O.!`i#DM+sR..N1|q.!/.!/.!5/!;!5s=!$ ^ͽ@͋= >͟=M= >`=i:!"MZF= 9:E:H:!!# s!9M=8=ͅ@ʤ:!!! s#r!$ s!"MZF=!9M=@͑!$ s!9M=8=Ͱ>@!! s#r!9M=͊!:͊"*hC!"hC*fC$;*fC!4;#4*jC+"jC}:o&"MZ*jC͢!9!29^#V͏,!9!V,! 9F+N+V+^+~+ngxs;w# f;!9^#V#N#F#nxʏ;s# Ä;!9^#V#~#foxʵ;º;ʵ;# á;!;!}!}!9^#V#~#fox;~;# ;!9~#fo<#;}!9^#V#^#V#N#Fá;!9^#V#^#V#N#F;!9^#V#~#fox;~V<# G<;!9^#V#^#V#N#FGw#´=*G~@#=t@=ɯ<*G*!G###======+=*G*!G#>*G*!G#*>*G*!G#?>*G*!G#T>*G*!G#i>*G~/w#y>*!G~?G*G^#V#~#fo))Ҟ>#–>DM*Gs#r#q#p*!G~?W*G###~>~w+>>7~w+>>~#>Oñ=*GF>y2F*!GF>:F2Ff?F*Gw#"?:F=*GF>y2F*!GF>f?F*Gw#U?:F=!Fw#l?> 2F!F~w#}?OF!F#’?y­?!F4!F5w?!F5?!F~w#º?OF!F#?y­?á?F!F#?*!GF~#?*GF~# @!Fw#@> 2F!F~w#*@U@F!F#>@U@I@!F5$@*GFw#d@=@!=t@!<=@t@=@@t@=t@@=t@t@@*Gs#r#6#6*Gs#r#z@6#6*G^#VK$go MSDOS-2 DSK$? MSDOS-2 SSI ?oMSDOS-1 DSI ?MSDOS-1 SS0123456789abcdefpZ/3i5F6/ 788FFMethod=@T3T3///////////T3@ H$/G/G/BG/BG/BG/BG/BG/BG/HG/HGPZC1ROMN16 FON m 9QNROMN18 FONUm <Q_ROMNB10 FON2 ?Z&ROMNB12 FONx Au2 Notes on RDMS23 - a program to read MS-DOS disks under CP/M. John Hastwell-Batten SYSOP Tesseract RCPM+ P.O. Box 242 Dural, NSW 2158 AUSTRALIA RDMS23 i progra whic use th CP/ BIO t rea file fro MS-DO diskette an th CP/ BDO t writ th file t CP/ disk RDMS23 i derive fro RDMSDOS. whic wa writte b Bo Alverson Th versio release int th publi domai wa 1. writte fo compilatio wit small- an fo operatio unde CP/ 2.2. Sinc the hav don lo o wor o thi program Apar fro fixin fe significan bugs th majo change hav bee t mak i ru unde CP/ versio 3. whic i th operatin syste tha no use als adde stac o comment includin som note o implementation Hopefully th lates revisio ca als ru unde CP/ 2.2. RDMS23 i writte i Hi-Tec bu jus abou an "K&R compile ca b use providin i support th malloc( functio o equivalent Eve tha i n rea obstacle yo coul mak th dynamicall allocate memor stati instea a th cos o increase progra size (Th progra wa originall writte tha way.) Th operatio o th progra i somewha dependen o th wa tha th BIO o th hos CP/ syste handle double-side diskettes Althoug hav trie t cate fo som o th mor commonl use method yo ma hav t modif th program I som case yo ma hav t modif you BIO i yo reall wan t us thi program Som note o adaptin th progra appea late i thi documentation. Pre-requisites: -------------- Ther ar som absolut requirement whic mus b me befor yo can use this program: 1. You syste mus hav 40-trac 5.25 dis driv whic ca rea double-sided double-densit diskettes. 2. Th BIO mus b capabl o readin a leas nin 512-byt sector from each track. Future development: ------------------ v2.x Preserve CRC integrity (maybe). v3.x Allow writing to MS-DOS disks. ================================================================= How to use RDMS23 ================= Activating the program ---------------------- Par RDMS23.CO o an convenien disk O m syste pu i o driv A i use are an mad i syste fil s tha ca ru i fro an dis use area ZCP user wil b abl t d the same trick. I i probabl worthwhil renamin th progra t somethin lik RDMS.CO t sav unnecesar typing Thes note assum tha nam fro no on. No lo int th disk/use wher yo wan t pu th file whic you are going to copy from the MS-DOS disk. Activat th progra b typin it name RDMS need t b tol th dis driv wher th MS-DO diskett i loaded Yo ca includ th driv lette o th comman lin i yo wish otherwise RDMS will prompt for it. The command-line forms are: rdms -or- rdms d where 'd' is the MS-DOS drive letter. [Other command-line options are discussed later.] RDMS wil rea th Fil Allocatio Tabl an th roo director fro th MS-DO dis an wil displa th roo directory Yo ar the i positio t cop file fro th MS-DO diskett t CP/ disk. Copying files ------------- Al tha i require t cop fil fro th MS-DO diskett t th logged-i CP/ disk/use i t typ th nam o on o th file displaye fro th MS-DO directory Multipl file ca b copied by using the usual "wildcard" naming conventions. A an tim yo ma ge ne director displa b supplyin n file name at all, i.e. by just pressing the key. Subdirectories -------------- I th director listing subdirector file ar identifie wit "type o ".dir" I yo typ th nam o subdirector (withou th ".dir" the instea o copyin th file RDM switche t tha subdirector an display it contents Yo ca the continu copyin files bu b littl bi carefu becaus ther migh b tw differen file o th MS-DO diskett wit th sam nam i differen directories I yo cop secon fil i wil overwrit th first. I an subdirector th firs tw entrie wil themselve b directories On wil b identifie wit singl dot anothe wit tw dots Th double-do entr i th onl interestin one I yo ente ".. a fil nam the RDM wil switc bac t th previou MS-DO director level Thi give yo th abilit t travers th entir MS-DO director heirarchy. Ending the program ------------------ B fa th cleanes wa t en th progra i t respon t a "Ente filename promp wit ^Z. Frank Prindle 31 October 1986 FOG90 FONGin hMATH12 FON iMAC-AD18FON1O\tROMN7 FON:m OvRDMS233C.Cp  !"#$%&'()*+,-./0123o456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnom6ڤp5v8&O6^ #( x:{F(0SD "Z\&]T"0X8%(8TLցFv]QRPġpMZBQNf;F,j"[ȦbR ENዬ.(W84)m.qFd6EǕSӵ8'e&>3nF( ID| Ͼ]hҷ՟:ӟ6ovG>L S8kqWt6)*/!:0iYK*d6)p8t4&NbW3mRzc}㋝6ڤ=]]&{wJ|,H>|܈B&{ IKQ w/.>YV~F6)%oIYqXvjMJ ^]mvWW'2ҽ ~;%>6čF.:E88z/>2e s`q6ڤHS Jٓ&;o/>2ePHEOjI98%諹 X&BJ=1%JF.HD;%%bzAm gkخ(SBVmvWW8sX]fh Jc5q:Sd!# oB+I+œ"p2+⃚,+ApV"0Em;<7\xy,LJ,z6*p6IQARw+ Us%SW0X~hwu<ˇTL^mڍ#N=hiإ;6* 7w-HKd!Qevj(/| ƧPp(/B|vJQ6]w*|W j@>•+DQ٩9WQJA$FKA,,NmvW)^t;.IrwQ\z6*p(\?@,clgvڤCi(oWy| (Vׁ6ڤ1Rġ1(8@!;Dv\&"p<'R#eD;m9+[U_C*u`&6=9)+#RO>BA;D$&5O:bNt|)Nz-;Dș K@vQxi^w]{\O*8Rda:N ٝ6?O?\%X>X]fh^r,ă+8'eyE(† (W#E W >7 ZY.Njw)QsL)G݇Wg7hƧh^H(,·SC^zXprhwMz?^]ܬ/n~C3>Fݷgx-*/!:0Ft┢.Ȣt UӕN!]ڝ6>O+[U_C*u`&6EEQfb"wڤE)"(*,Y+x:{FDTrN;m9]#x-*/!:0F"FF(F"9^kWEqN:6^e:9)+f5~68'ey)_'l]m.*BE#0wHqE QevjzB,@6È@{&oy(B&;!vuEk^>Cu (rP;uSz7\v6R|xU`@)Yd EʍQevjQxpEaDct>]{FWyh8}J?\Oَ/uEJ,z6* NF|(P:59!))K)Yv8kq;BR9!hw;LpF(`8 ΟbpEۨ0;tp}ly|[@e q\T^ #X@XyԔCg 8 ) "\?>["ՅKpE諹 XEQĝ88zL).*]{~|FPX W諹 XEQNBד ,΃+N!R]XD \ϞwC ^H#9r|&^\EFGvnF3<"H֍VF}AD 7(F2؁+r'V+DG!s DK( "x3XI^0XÆ\BW씢諹 X)F,CRC1ꐗ)Wb+Qa`( (XsP,~͡psRVnG(Zgb)"H(]{+QR E4w>jxaqSpr?Avg>";Fy\6rF( WzRo`i=IYqGԎ+Xb W"HnKAGpEp=7s4B|$,"DbR#`Nm.*Re8Oǫgn_nprhwgg7x\f}qs6ڼrLwo+R8Av^ R6Mr=f;6_duA "cP'nKA ֡woXd "ݨ\WD,y99J:D\]u{Cv+ۨ0;xWAED ep%N<%D,+7ݨ,Œ"uΟbml:/(XBg \,1\sEB)Yʍp/+ KWMv>RwhsWPE!+wLrP W+B-^M'(;Yi+dd֦Ppe!\((ܡ "Pϙ \(YN<QM D=gEU=g@Qv*•( \6դJ(NE Xzwg@+Qr(rWF tjXX(NEQevjs >{F<3\ZbR6YI1pQ"YQglJpEX3!(B1ijWLsyFQv*NPϙJ9JF"O|x&ULJ XX6g(;YB\NP ف+ W(2;5yVsmJP*7a%0r X S'b2rReL<&:KA ϞCQ!CF`AYJ,J )Br+ w(~cPT$v y+3n  WXAFEQdͱ!O*0}Ft(;!3 JR:K>{F<`M>@=g;d9WߍjRp%~9C=gHTPp%"RNm^98HWn؂+ +C,BqII9Pϙ`+Q+a TDvxPHD vhsQh2Pp{^aƴv\ᯰ);|&pEN)ʌҩQ`EaNq^pEPĝX|63mW ׏ȳ6F>&zul(vFVm^F*aU<]]\j2R)p&]^XƳ̮&>ӥ6/# '/_.pyMşyz29Ov5^礬3OWy| (Vׁ̟yz29?^ĝ FsE¥(nW]jHxBM6/# cz6mO`wEV+d7 մڴHx¡S1uSbgm^F*M꼕 ij6/# )uSDjڤ6mO`w#Sٍz)H56/# NEtSbm^F* 7ڼT's&*(m^F*ΝDgm^F*F(\F( FjAtQJWP/#i)A>r,YpEۨ0;D}ڤPI6Y SN?\c5զmZJ񄳛ѦVmmEE(]QCT'HLj$RfZ+`-R <"ˆ<jwNhZmi|p+")p%XF5)t"RAa%VJ񄓿!=?y6m/VNERJX|7I +дڼT'|y\ߜ\?^_kMBX a%3 yii_0"&eѴh2R)ÇGRJmQ˨!P+ MHxHnQ7BEGBj2R)p?ܬq[JmPJA R(<%Vm#1p@jHxً㿤bH) "+1p@ݕ%)XHzЩb`+ً h6bF\l\?oi|4՟ m`)S=) yi6C1Aj#yF\D\?of8hwCj yiѓB#)46 *YdmUP)OoO3| O m`#E28S469qF\(ן`GOg8 GOg8ӻ! |$QevjGOѴڈEY8hxNux xtO3<ӻ! |$u-iϩ.V>i|6 GOW 2;eѴڈT˂Ƨmpy + Qϙ,Vms]imi?^ B( uA_:5 ,c5_hsQ ( uA,Yjag5G( (\,Σp\6Qr\Td Y YEC^RJ@J3pQL-\ yVsnT+E:Qϵp0I`鋹 ^`m$oA ;pE%Y W+‹p98P4hjJ\߀+V0 "ĨA&+ #ցx0Xx6&3JJWC6IɦbS o4 v v88B-l1} h?i͍g5F5)|$ `<Ǖ+WVxWg>B,`-Eӆ+5ءG$&5Ob(7 E9ENSNPpuAEr`qXke)<9|7I G9ymrݦ0Ă+B) bCQPD.:ˤpn<+!UX?HD)a J•H!(BCQxC4WnZmL Ň/͐Rjp98QѴ*E]wLJ͐R N46 *5QԠMJM \w,6XoKR$&51pj&WAv!6]EQf樻$F<܏]i|6(v&WAXJAoR۠|((Tn(2;5GjҾ^- )A)0"mI MxNQ9 i|6J QM͡S1rHӶuդдF<=0C],RjR дoR=g:qA7ɥ4iuwR eEaզ3sRVUPix?o?=|z>{Ϟm9Sr[݇Wg76)~HӶ}6Fu>^iѦm׫gkDQ٩9ȳò2wдh2R)ppx6XV]f ƷoI)7CJm{QQϙP SP`DߠiI)͠ML)0+mR=gJʞ>XR,s(zul&ud9! èGjrP<6XsP,~\tIwVoR)!JRģ3Y46i|6p \3Y46߾Ʋ2>`|VTϙRTCJm3%"ͰF*CW 3mAwhZmR=gJ͐R^ #Bj9S*՛!F3y+ΣiI)~Hmpg ߍjRhZmR=gJ`HmORPI E E٩z΄:ѴڤzΔѐR3) \=[aChZmR=gJ*) (;QM SE٩=8zzd'hZmR=gJʞ>ӛ! \wisU- piI)e568"P8ăLѴڤzΔz}fHm|t#(NEnTBj;m~tAmlA[98ǁs5 ڜ;n+O'6N""żd&WA #NmΝD#^M'6N"ɠ͹E!r:9w(hɠ͹E!)O'6N"|4 ڜ;Pt2hsT=_./A\F|t2ĝϤ *d&oдڜ;Lt2hsTD-^M'6N"rEyy4 ڜ;oNmΝDD*ϑ,ɐ'=e)%i9wQOuAɐRdup,d46gR (ɐRlH2F4rjP.&,ΣiѦmVcmISOGxm?ij|ܴh3 Am,D6y&WA js͠[m\6Ķ ShLI1Xm/>-6RaI!}Ȅ-6VR1x Cɠ6nm2M6ߖ}vzmWh6[ ڤw`|K%m[mPnt_JA3-fOm`=i/ VxMz ƷRb #*9'Om[mPggJ Rʩ>,GRj2h䜰`HmPa:DD%焦&whD8 Ls`1(%ӓggXLm"FgNd@Xbt=S8ep>{FM6@-^M7ֿfb2 ʌ(vдbt2hK)#8m^rz@! ˁyBE٩h',A䣔Bv94C( +g(OBD( Ѵڼ2Rx. (ӯSѢTnm$2;q_΢(+gڤPV>6GOMm^Rj( 14ѓO3DQV>E]wdHmE!"xvȩ9V Q7b16(ȳ#0G46@tgQ6ɠ6@-^M7ֿ܏]fɠ6a%a!~F4- Տ&`|*%YV龔&m0L4 `|J%m0i#^T{lIi{(i)>NDiM` RJ(Ss46 ^rzy ZLN>Y,Y=g:qɠM6R(]O~K)hr2h0٫b` $ocIFMJ5mk(ĺXNb9C ܳ ڤHi],D0>}ٍ`)ShZmRvI g'[Ų ?hƧI*,iƧoSjA2;&%oclgmRv*`ŠMJ&%@JLc~!I l.6)a|V0٫bQl1I P 4rv0{VY.ɠMJt}ll1Jiv0[LmR6YaA0>}hZmRb--fEAmyi]9 1pj]9C.ɠM̅4ͥ4y)eg7?MW⹜^Y W`E/gu'6/G)IZ7\Mz4L'<{, $okEa9h%,? ^9.W( 46 [)1tmR*򳿗trtOmƷ|Am(,mr4>mzEQfhZmƷ8{5]|8[>[̢sAm ܳD $o&6I Pb],u!YMmRĴ.vMJִٍ`)ShZmRvI g'[Ų ?hƧ6)u|]r2h %ӺX_r1vž,mR.[,mR"6MM0 `jqjp}~rv0[La7oCDm~kZmƷѝFQ[g&6 ZQX` i|6xpEQfhZmƷѝFQ"ɠM|D MM: LKx?|D@J46@ఒдht}ll1(` utv_ֿr?v9 M6mkMFiƧ۱FtFLj$,+\ xޓ+q^=[#]3A, "EmR=H ",3pb6qj͹H|1i:6xN.y *YuW>8zfF@QkRr2h =?4rݕՠM9).Pϙդ \Tp}M)]Hq)XLvMRzie%R),evʢ'V!/1:¿)9hϰ.J8_a)S=) y՟88zzd'ڤ~*gVV" KIUKLSs&;Ѧi=c 3h< (|(.^Gyf|Qh< u[ŒuKom+,HuKomXE],|l+-NCQXbi &x(GJ; "ż'46ڴj|6i| #6i|kmIwʍz(B@)퀳n[pExvBfRڤTp/˝6ڬM6 ͆Ut[m\ƲY h}vzx&R aDq9: (7v/3X'6#R g|2Ӧg-^<ĴٗR[yj;UPh&~|0m,72NPS)8/M ;aY ڼFY&O5 ,IXkMz-zulpyi.:ˤ&;mYVmΝD( .ӺXz7Cݕ=69һA\+{V6oy)eg7? +\N/(DԅK|~88zL);/gunVK+'6/G)r:whPK+'xKٕvXZ8Cݕ=ɠ;miXmTa&Oc6B,\U=gB6C1NYʍ<׫gkD˝6ڬM6N"rRw#Ky+{Vmsvi)ϴIYʃ6 *5uWmjD ƧoVQkhrk{aRj{<9ʞdۺ+{VxAoF4>U DAڤv&]>PV L92;Rzul(vI̴FiIה3X3]9F<'V,A\+mjH9)+o_-&`|(5)R]9 ƧB\SZ,YݕAwh66ڤ! b Bk2I 6ڤ3G8]{[MBcNARQTnb:خ9%+wm#7Pvy+s;BB^2;Ptd }"9^ #8\Sl|y(:}O)k]plӦi, "XPKl:, "X^SA@ B^[ZhC\M=&\h[mr/뛓Nj`|+%V"Yl8 hM꫹]SSKye{n\MOx6֊rF,?_|[)1b޿_=Gm[mWs-=m*%l>m;m0堍69X}x|uv]oJ$Gm[m*%o8IZs{4&a|V'B^$ojnהR^ۣٞ'WӠM66֊rFHe ƷoNfb-&mƧoI*(|}f&a|[g&v E!rQ;3(d&%Oi/< ڤ&a|m)ѴڤwhDJ THAOi P}_|]͚͟ mP}_|]͚rsp VtjZh{ptyZ 'pɡNu Wil'CJm}5CKBݕ%)46E|؂rHm𣏁 \%Bd-"1٢i`yM[ܮ)hmE!)_iѦm + + + + + + + + +Bj͹E!)MY-ggrxN3Xʃ6 *5uWڼP'.Ҡ6=W.N69X—wm0S+,[{Xs{4&Ybj)lѓI OpptZQXh%`|+%V"Yl8 hMzM,el1Wդ4hVK<}Xڤw`|[+ Amr6JH-&ڤ$7[ $@JL-e=h0>}MVA񭥌-=mƧIV6D*CWwm0t2h; pдht}sql1c-&6@-^M7뛓bf)Ag뛋Ŭb2hD ƧoVJL񉋄-jqvp9-fb2&& .__I@wl%Rʩq"8b5G\`9'6 (7vr,GAH)IM`lx|MTHb1hޡm %VOߡmVఒ0U'.dB\SFjM۬hƧKiƧFtQr'9EHPsE)""mT6)Ѩ+pE~|Fr' 8 sxl1&ٮb8\. 2KTPfP:1"\ij|ܴhs$"WGӉ65mkHH-&`|ZF6J+q%򳿜 `|IujwQJA#]~3Fd'6ѦmVcmIS#jƧv&݋FR z(Ss]Y%"X *WM]dmћAr`ɰ8uMujUPqFRF*qvs/NEKQJmKAˆR MmC)"0|>o[Lsɫ>Lmu>O4c-Ugnh ޿Gujo&$J=Muj Jjd2'O;V6Rb:m;V]_/L6[L(dg9(.[L9ӉΕ ꐗ`#NѴ$6 ӲN/s(2;5G4d&a|Z{lI*NymNDR`Qevj&uby)eg7? ƷBS]YLN0~3Y8/gڤ&c5ٕXMv%^M(dWJA~VK;۳ Ao{%u~rVɠ ƷS.CYoؗ埇66 @Yc O{.\^Nz2hJ<. ڤw`|w?A䣔`|+%&c5f%5bMi#^[,m;:I6RaITF6 n+O;V_R $Os?(WgARF*qvs/$W⹜^ܵ( 0xuup;8>YGޕ~2h|R[ $ɓ(ՠMq<m Ƨq<Cjx(]#Vwh66ڤ0p^ƷFtQr'XRdp6AJpE8<ˈPH㰒\ihSfR #胵t=9ء&GBFIQl_9JF;"R|N@{V!3Eʍx:{FEk"5"媔ҩQpQE\)Bv^diJ)>ց(]O~:APQ>F"k! FCj͹F"kOUP734i#^VN1[,mJS߿7mx>L'ɓ76@'OAtjۧ޿_s<&`|l~ɛA=xy|І|FY&?qA+@ڤ0hMBĂ%bIY+ݨWdNp(\!hJ؞f5>nZm9wQ^ zF4e uWNUPa Mݕ6o7*)Ӟgd ƧUӺ+gr2hPaIOj񭔘2lxL{Ɠ-6KI!*9'46`|[g uWt2hm9Zxi3] WAOi] X ڼFs'k)fdyyMJM=A\Hmsʞmj*0yFiآՠ pXIAV3~mh[m0ӆix Ӟw'$)1m>oOI@2xmI@2`=iô'O&CjxQ!;[*,iHs<ɓHm0>} pXIA6L{h߶x{>'O'O<Cj4ܳL{y6mkM"J4>ݎ6ڤJ,"PoVٍ:yt"6) NQ:Q\špFl:YR|F@)oqR+(p`ij|ܴhc+8p0Y mrüf%~3CcY )FA~Цx m[988 LGsQ_&`|*%a^o[ݎ6ڤJ,X< >dCQXWY[w3G#m[0b‚+Bv^ R-TW,#B! jymR-N';8kq;[0:Kg(;YǷ[wh76:QWmfu~,mfU@6 !'ey DOqm'Ob&ᰒ0-7x}wYMmr?.+lqptU:$}GEu>6ѦmVcmI)PBA,",~ MJsmIX(ױxSQXpE8Y=E-"ԮcpE"]tjf5>nZmyOX_xuk9 |7I1*G(S,Vs'Jsd?KFt[mˁ%ò2cT~g5x Ƨ EVJɁ! "EDK(ny!Si4WASCJmC>HQSM ƧrRJmhZm0>S RjL)XlZm0>UP@m!6uQN56*(.FCJm%F.VOs@ѐRj3y(ej񩭜bD;RJmQM D]XiVN1 )ݨ&W"NA M Ƨ bH)M)2(u(\9evi4WA8RJmc);EQf E2)SM ƧrvH)M(/m7QDERflj񩭜bRJmȒ:V!/mjiz[ )髹 (NEJJF2;մ`| )髹 (NE]66*(=)髹 XEO B^66*( ]o&]=jBaN}Y(VF6:=[mčF.:E88z;6*F[76ogX b1bi~q5b b1b??3,y1~a?X̰/3, 3\ϞWG8[_δS=bͰ/3,GfXW3,?ϰ/3, U9b3m0>] b1b8a_\Ͱ/:zur6.:bfX j~bજ-*gXb Ƨb1ba_,fXG3,.g֫/ghb3, b1ba_\Ͱ/ where