IMD 1.16: 1/06/2007 13:10:27 FOGCPM.183 --FOGCPM183RELEASE TXT EXCASM SUBEXCBIOS MQCe EXCBIOS2MQC !"EXCBIOS0MAC #$%&EXCBIOS1MAC-'()*+,EXCBIOS4MQCJ-./0123456EXCBIOS5MQC789:;<=>?@ABCDEF-09-30 87 EXCBIOS3MAC&GHIJKEXCWTSYSMQC7LMNOPQREXCBIOS6MACSTUVEXCBIOSELIB(WXYZ[EXCBOOT MAC9\]^_`abcSCB ASMdefCCP COMghijCPMLDR COMklmnCPMLDR RELopqCPMLDR SYMrFONTA COMstFONTM COMuvGENCPM COMwxyz{|}~GENCPM COM(-CPM183 DOCGENCPM DATEXCLINK SUBEXCPATCHSUBEXCPIP SUBEXCPRT SUBROMRAM COMThis is the disk name. drive (without the :). (1) is where the source ; files are (2) is where the .PRN files are (3) is where ; EXCBIOS.PRN is to be written. ; eg. EXCPRT A B C ; source on A: .PRN files on B: producing C:EXCBIOS.PRN pip $3:excbios.prn=$2:excbios.prn pip $3:excbios.prn=$3:excbios.prn,$2:excbios0.prn,$2:excbios1.prn pip $3:excbios.prn=$3:excbios.prn,$2:excbios2.prn,$2:excbios3.prn pip $3:excbios.prn=$3:excbios.prn,$2:excbios4.prn,$2:excbios5.prn pip $3:excbios.prn=$3:excbios.prn,$2:excbios6.prn,$2:scb.prn pip $3:excbios.prn=$3:excbios.prn,$2:excboot.prn,$2:excwtsys.prn pip $3:excbios.prn=$3:excbios.prn,$1:cpmldr.sym,$1:bnkbios3.sym Osborne Computer Corporation 42680 Christy Street Fremont, CA 94538 (415) 490-6885 August 18, 1985 Mrs. Gale Rhoades FOG P. O. Box 3474 Daly City, CA 94015 Dear Gale, Thi lette i t exten officia permissio t th Firs Osborn Grou (FOG t cop th update utilitie an BIO sourc listin alon wit th GENCPM.CO progra missin fro th origina distributio disk fo th Osborn Executiv compute wit th followin conditions: Th Executive utilities an BIO ar onl fo us b FO an it members. An mone derive fro th distributio o th schematic an BIO listin shal g t th non-profi organizatio FOG. Al suc copie shal hav th appropriat trademar an copyrigh notice eithe i machin readabl forma o printe o th paper. O an suc copie th followin notic shal appear: "Thi informatio i th exculsiv propert o Osborn Compute Corporatio an canno b sold i whol o i part withou writte permissio fro dul authorize perso fro Osborn Compute Corporation Osborn Compute Corporatio assume n liabilit fo an damag o los o dat du t modificatio t hardwar o softwar implimente fro th informatio supplie herein." Osborn Compute Corporatio reserve th righ t retrac permissio t duplicat an distribut th programs an BIO upo 6 day writte notic t FOG. Sincerely, James P. Schwabe V.P. Product Marketing BIO listin shal g t th non-profi organizatio FOG. Al suc copie shal hav th appropriat trademar an copyrigh notice eithe i machin readabl forma o printe o th paper. O an suc copie th followin notic shal appear: "Thi informatio i th exculsiv propert o Osborn Compute Corporatio; Assemble all Executive BIOS files ; parameters are each a single character indicating the drive: ; (1) source (2) object (3) print-file ; eg. SUBMIT EXCASM A B C ; source is on A: .REL file to B: and .PRN to C: ; m80 $2:excbios,$3:excbios=$1:excbios m80 $2:excbios0,$3:excbios0=$1:excbios0 m80 $2:excbios1,$3:excbios1=$1:excbios1 m80 $2:excbios2,$3:excbios2=$1:excbios2 m80 $2:excbios3,$3:excbios3=$1:excbios3 m80 $2:excbios4,$3:excbios4=$1:excbios4 m80 $2:excbios5,$3:excbios5=$1:excbios5 m80 $2:excbios6,$3:excbios6=$1:excbios6 m80 $2:excboot,$3:excboot=$1:excboot m80 $2:excwtsys,$3:excwtsys=$1:excwtsys rmac $1:scb $$r$2 p$3 sz excbios6=$1:excbios6 m80 $2:excboot,$3:excboot=$1:excboot m80 $2:excwtsys,$3:excwtsys=$1:excwtsys rmac $1:scb vcEXCBIOS.MACZ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIoJKLMNOPQRSTUVWXYW/7g>Ō3RH1KܶQpsv}? #gcp-pzN)fboٛZ˻OˏO寸@؛i32Y )fbF˻o;/ĘPaJ1{_\;uofdLݱbF˻o} 1fcI9!f}1bƧ?w>yTQM680k3Y*V Xө$Ō3RH1F03&0Ƃ D RH1zBfژ@fܜ]3(Yj6t%Rw d] *,>ːbÃ$@EFXB9>)f;*a!Ō3Rx4L%n(Pkb`i&k `)fq+q(n X`fpQqH1bƕbF 6B7C/.n\(Ōٚp(*`IÊV0[3 aV+ 6ťaB0ٚ \ tK)sw^oή=].)fCQ+ 4Lh[Tlj;V3CNQFm 6XSNpn1k3l,6VkXS.B$ 3 8b̀n3NŌz+UjXZBN)CPH& [a@IjX43|3ݱ pš VK"$p(*TT*Lh3cp!P03дbF/\\_˻}PZaunf\%;bՀpyO1 T 6֬MN$z> ˋ3˧a} *a} *vV\hlR l]? ÅO03ʉ Pn3ٌY ~~<\ zxחpr__^E m,a`n1'G.39'k: 3'| %T1[3 h-n[1 +d+LӐbFz;^7)f;ȸLʘд4k fv¬dH1 F!/B~H1#Ō^?=i8~I1AeRƬݒck 6P|7S6CQ($|'Pq{9b\ߞ7)f;ȸLʘؠ5H-9eg3Ï/*'b&b@ֱ0bـۧppbߛi@6V1k#l,cX aRH1|z^/)fCQ [0 4hX 3 IXM89QŲ尿CQ ]3LGK03_=o// .nS`E6bBpAvdRlِm[:&pQqH1#Ō? z;6?ܤE61 vn 68/%ؤg}.OgXfFUqKӰB\(@EF +\ow tN.5*^MjB^cpӆh2.2fmt.*$ υfn‹㇛!Ō7n3S XM5hIRH1nO& ,R(ٴfvVlY;m aRp۳ \Ow |>{_=o//Rޅ7px:Î!hXqb{wm8~RH1fӚiXQUNg f*؀5Z)fxEqpYB Tb .1Y ˻g7)fx! _/oGY dlRŲ˧3ۧ3˻_> OWB~;/BM1{+d f03fm$ikX;3,.65,b~ggk&‰д4%yR aFœŻ4ƿ/d \amnEUܻPќ]! pYaa!2SR޿7}!KB`a!ܞ~]^RU&p!V&u$p(**~a!B&!hXqzN`bwK 7C(*ikX\1F~m)fliBU9 )fC.v8 .ڽ 7ikX\( MMيvp̪ݵTv,aK1{ U4``nE.bΪ6¡iӈ M5pbgVS 8T8K\)f_ \x=LcS5~r!Ō3RH1ft%I1# iw"4-Zv¬dH1# }b쀫%^7x&Ō3, _7^\BV & B3NWB#f03s®h/)fxw 4 axY G0ƫ 3Y\9aW촵3v0>=bFfdyRH1Wn4zb쀫%n3RH1# stk gHp-9&p!,jk6dRH1d?~<;RH1#  }b쀫ۧ^/o&Ō3, _/o 1P 4hXSs!6ܻP0^bF0ƫ 3Y\9N5 =pY \ݒcC޿o 1P`WB k#t3-b}zĬ6)fx*3!Ō3R7-\k ~ ?|AU93 )fU`R?\pb{v&Ō3_ҳ3Mo 1P`W3\~RŢF0k#N[B#!Ō3zMg)fxn.z=3R03bF߭N1h-9A\( M'B裵9Aip9!Ō3R{gY)fxWfm$p0 U,[\ؿ?ݒcJ1{.[O2BBYgfFs!ܜ]Bnh%Kfjk`3z8=Co!㺒0Upq .3MkfaŬ R l n"~bUD'SsNC)fx~<\K?9 M`VJ1{n__zטlpLM`VJ1{t}tw9/5Gu9Y$ _46V +N]b/F2bg3^o0f \H6 (cGaYe0;9V\) ٺ~C!XY‡ۧgX=rӦDC'p!&YBV4*Up3n&] sV Pp \( O]vK#4hUB)fxbk ;R[aI2g3PWҰb*-^oZaB'tiH1{.*0;9V` l]?] =rѰbr[͆=]`"N1y 8Pg 1 ۢsJ1(@ fc!f"`Gj+ u& )fb1 3Rl֌pPdNa@ֱpbk:Qp!z3nήؚ1 %:ְ8pNVԄ3㴐p!l,[3BTS v b)fx6 ! zqa {|^`9 5'B740a+&\{H1s& B[3bslD5 Y(m;B0M`I,*؀Jޟ5apN"LpZ!R, a6´h/ikWG3z8=>`kF5wN`zE}dՋ1 `62`v)fbF[rLp*'b& `I3R 1(`4x7 _/SޏMYIPUNL9nH1uW>K1۳3/o,@T焻)fx LY<׻gwbX%mP=R4C!T14Z='@hb~1ۯx7iH1yW>K1cޯ?BU93As BRޏ*v\k6daZvK#I1{? .@;Pa40ME*H1{ʉ 7pBR *\)f%WEqVMYIj 6PRH1# S Pֆ= ^uۿA7-v1ŬQ:,XÊr"f Lh[,ư[bՐ F7ڔdH1#Ō3R߸RH1;ӆ ~DeH1#Ō3&3Mְ &Suނ nήЀǷعm~~;j d*4~y'BҶh.[) MհBnaq 4bZ ۯm~\]wNXB~`sgՌJ%h*kXE7g83J \GQ+] ֚պi"Q}J)fx.[kV릉G֦$>j%P Fp^crat \ǭ0M>j!Ō3?ܜ]sUf Ѐ_C0 3nXL.lS𖜘 X5\Tpsv}N[ m ;b_Å e`u Xh6@ܴibF/(*P mԱ84lְB)f6®h/PJ@dp"4-m; paEÊ^\XI\0k# 򣤘.j$B򀫿_=ƚպ ,KߜMK:b^Н%L0 r! .KP`E~c4Xp!T4Z0dҐb?F zDϩmlqbp|{ )fi>2zVV&JcC]^4 )f0NÊ5uY(Ta,6)ֶj^V dkXB*kXE7gg)f/Ͻ?¥vk 'BȦ?y(OghNdqzw3{(Ogp"4-,w__/nxb7gfCаb) on՚ \v AÊKV3~Wk&o^< _?x5ۯ0M)fg/՚ .l![apo,^Br޳NTaF \fCֱiJ_~ )fxvuu[E0h&d*l$ QfCA.3a *Uk)fx_\;g]g3fdǨt,Ga{`.5du 2RH1\gt3cXDt T& a P fc;UBp"`b\ÐbFޟؚՄ .*Hĭ6p 9{bT֌kV&v< f)fxB  v< [Pp)fxߋ3YHB9>BByH1# s 8f6a5 rl,f)fx:\pd0Vpo,fc'.|3_줁fӚiX1[ * bl~pxbFX5aEzNx 0,S𘍝3x"[pQِu&-?bB TЈ, .jPܹ\( 7,8N.!؏K1A( ﻙH0[3ax8b7/aic,  dBMkfaM16 fc .5>K1# 0QU1TPNwBg-@&RJxT 6N*؀ ! }wiXfnN b"ҐbF/?0QU1TPuR`pq! 82F 6X\T`D_\? &Ћ +a\ ZcSO$VRH1>tNvEÊfIDP Mb p!b"T"#!Ō3?Yk,&q+݉\ӳ3R7gGb?Z='z_.Rҿ:uY!Ō3BS~; ֫ Y|䪆 ŗUְ~ƚUǔbUP1M10 -͍:  lMkd?  )f\/pB&d,BMkfa}b7Kn/mc Sgٌ^}YkV T;2)fx ִF@(B3xp!qZl^ zBVXr5 *3! ߇a^\i4׀B l.P'W%IJe ;3l,?a2=\'IJe h`5A9 8-dq ˖.TLTՁ',[!Ō3|PT0[ *Bib>K1# \T`6d  c)f`I6&AN0[3ax8g3̆c5*)f` iXaR pnfc15TJ6P̆c5*``RM1oV\UuŅ07BP?Q\TRUuŝzqaz.!Xɉ3RgL@U9Ae ! + [:`ok oa,!Ō3 .K1A*` a pe tN1Kl(b! HTl@1;:'{.!3\( ass+T9K.Tp3%Wa,vVKl T,lF1B)fx1:ckFqljlDBYe)fxv+5u يE/0VAM`kZp A4Af [aYB5}(03\bF z> w!Ō3p5 l ,.`!P`TS.paŅ(QRB '< Qze[kb. *)f ;ֶ(.Fb1k, ( )  h2v;7(3&fd $ik)f;R[E*8m4` fƮh/vgɁ F!Ō3B06hX\V՚qClVBvH1 zM p!X3-\DH,*4 }tLY 84K[3s# p)f `H.Ќ9A&SF LE pCݍBZ [acl$B5 ,[p!,ưu .da6vr&`f3 H1c#h/(.F.C)fpAU959' BV]y32,usNv) ,DVpCݍB8va6BXČSB7`{l.+5*Ph.j\ZX3 WU( !Cp]kT1[3 m6l:<edX )f^ECQ nJej[Tg)f U84KX2Z4cNB0 [)f 5dH1#  @DJg 0ʦ-U .I1dL%ͭP;&B,6֬Mعb\k k 1[IPT.B*XFN1\cr[JpI1nna ࢂ… .R̀ mS0;GKX25#\ʄ5L~۳34@Ya֠LةT3AEF8hW통c"ҐbF8U`Fތ .sʂfJ\\TNf݌(DJ`ِ0\b`6d 89QࢂJ R*bV;.0$lF0|.*0Kl/0'kа ҹvBЯZ&sl,fc1YJ ;3P2TRll 6X< [~G.0[I0 !3fdðn!gaBp!t_O]uE*XQ( tȘ  J Hj M1;s\}3#c"Tl1\f)f@(fd $ؚ y:c`203SBwB)f UX.lfi4 \b4wҐbF 0,DlZ3;p!,jlzqa ')fh 6FDF1Yr:Z +b CYC)f1Z agB%aŮlEA5$#sB @ qTllSko3;TS̀ ࢂE`X˧3TljSǘC)fbS~RH1G3YUX5Y +e16fڌL{c7:VbF=_}(0Upq:bF)f1m!Ō3p43%\UaH1SPælEktp p)fxߋ3YP ։f p!̦5Ӱ" @DJg 0ʦ-U .I1dL%ͭP;&B,6֬Mعb\k k 1[IPT.B*XFN1\cr[JpI1nna ࢂ… .R̀ mS0;GKX25#\ʄ5L~۳34@Ya֠LةT3AEF8hW통c"ҐbF8U`Fތ .sʂfJ\\TNf݌(DJ`ِ0\b`6d 89QࢂJ R*bV;.0$lF0|.*0Kl/0'kа ҹvBЯvEXCBIOS2.MAC_  !"#$%&'()*+,-./0123456789:;<=>o?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^MKE O}ؽ%1RV nRW-"g {pG!&q[o5.8$#TM9h(b& g!q.G&$# Wo ͗ 1G~!\ ~G$FT]B0ѭ!:;gS$8RpP;m#E3C9 b}9jq݁q6jCFT;;lx1م[o7޶{۞zϯ_ zm{NM3==-<&zm{N/9^DDϽm=='+~{۞p)sosgSn:D^sos?u:es肛z?|B/91~q?5OM^so7zm7G 0Kp+A:#iz&ק6zMDӤY"Q 2?4Em彫w6r)ׯx1So}z)&dR-#0矿~_?_ q8bx뭷4JY Q# qkaoiT d!b*$#4b*UM:dvCbP 8zKXT5iٍFt4Q-Mc-Rd$!:$4b*UM&D!j0i(NFS$# W"j0Ɉq"s0MXfoik1d"j$C5'U4ӯ~{?#x1A`qe~oܽӯOoKDLCx1م8[o/p8]?.\!C0M_$'Qu•A7D-GoQ]8![oQW4C:$r[ AN rA.#rlryꝷD A:2X.^4tv&2 A$& FqK'jar#rp䭷M A_n/W'M -\f54+[oљp+=CZF92\fHg%A:c5a3XO6Α2Õ8㭷^4\?k{ 彫w؟\4y{vFL:oq}rvFL:` W_4aTpvFL:xkaf⏃>5ܼ-OLK0̌쭷6+XfqpT vjA;QIDq2 W+QI8 WB!j!Dq2 WB}!j!8z(r6 b*CLC$򦙽mdb&x1Tم;˷DhuNVψ\5o%܁F>QCQ6 6JC!&1L>7;>!FdbCDaVa6"d=qFhD!&qINX]K"煱t+*q( pFY0 Kw؟o;#N0lvէz+"n8qե]:t't!z-@qS&w0IUGMpݭd&-QMt 9 VniNnJ 7;QÍKKw Yޒx[, W6&q`[oe:gƹsBzKN QCKwx-@evD -q(&#VWE͝X]tSQCȂե;V!")zw-@n.D hf8dȭTin8RKhf -e"jHz+A{뭷R|[om&RN8(t CLbLjp(LB/6,bc¦\hU4Go, {F QC/O1B 5lZM: &au62Ɉ(@Żaw6"P])0adb{9RL:@:#+01gd>DG m qP])& p5CLbܬO/mlo$#-M#vZ+QCt äGxPoJ 7W /2^xK.ڷN԰i Qxޒ \f筷T\ 0IWXDo T2/evj ĭ%2B^J΋qjp)@Yޒ zJ/Y~슷R yzB @:2Q Ȩ[*nz+Qb0&5 [2R/R tzK&U[orM[Pu:a+$ovvD pUzKӈz!jnaL! W,֓ޒI{K&U[*|[*nzRJVW0&"K !{K+[*|, doW -@n |KP[*zydIp!do%ԉL ! vo(akwDadIxzKӈ5d~nadvk[oe6HL @ QI護tLvFhQÁS/iFQPu$-@avD . , 4J`"/2^`_L–58ΐ `QD&6鞈Ι! , QIo[ t'aԜQIoɤJ58A(ұ%2&j 8NЅ3d0lRxL(jCzM:Do)l)QC/NXO QIoi҉JԐ9f$b*ㅷ4iD [FiƹsBzK%oz%j8 bAdR%Gx˜itFMKѳIo)WrD !넪# FS{Kҳ9pL IA2#r 8jfo)tONVQ43Lz4 ^jw[tD .&mD hGwj&2 5A]ATFfጤgo)54b'5D0jN [2R/D @/];BˆM:` Q[!gg`ӌ QXم4D5d%t$[zl)*h:EoiN50;oM/D $jw@xK%:DC!pe^Le[oQRaHwŸ+LDupzˆp)8sfoQupzb)w3Iqfd,6Ÿ D1 D!dbÅ9FoiNk%jna^Le+Ҥ!s͌Ҥ-M:ۼ3Dp<&fSC護1=M:Q/D a'"!4!wcBHD .R41"`QIojQ;buWoirFUEbxۈt4p(\)v^L護D(•db4yK!D :dQH[oݸ{*?.\A`2W1ljot=@UP5d~&s g[o{*zu4&(C!:$' D .AF`VazK![ou4^~oz;#D̆.fH>IRf,#'o!EuJ 7. 89BEuJ .ӽT2of[ouȹL4ةoiS`oiZ[s7Q;;zKՕB:$ QS]8[oi҉JԐ9f!Ҥ&oBQ+A[o)p^񈤂.pbJ 7woI3`Ό# DzKҳYD Ig1O8;#&Wbo1Sz6.RuP2QÉ Rg'Rwcl!Eu̒Opg\ pg6:3[+sh H.FsHn"/4b5D0/2^xK%P/u|K @\hU4{K%W /2^xKq􁨡jZ8 D?)y$WFdzL Q$E7XOR 敨;ۑ\{*5Oꄪ#dRf\aR o颙QC-2FD .DT[oGre5^_$Q]Ç?-FreT$ wޒKnz%jSt'p1C:ryK%M/#jHzH.FsHJ^曅$&5I #pgT[ޒIz4M/D f9 D-=fJ\'jH:C:'h[oZ•"3#0ULVI nIa*q͕vwTN(zznp!d[!DHghbl#!q)=Gr9! (VFd(߻6IT2Fr1CQ/E#K7-@7N ETƎ[oGr9颙QCzH.FsHR(V9$I'Z+QC(S/BD *D9$͌]3D[oj䃷쭷&2ÍFQL(6 C!3GQ護DrO%PGх8QPℨ YDQ8[oݸh{*?.\ljj'z[5i{*?.\!C0M8kzT8'jT=5ALCɈȒYDqB @UGM:$' D Օ#0 Kwwo@`(V{뭷tH'6ǣ&i8YzC8'j$s0MXfo(/r-iNPxFjOp_ljY\! '$/4ةS@.Cҝ b*{KӈJ|F+tH! /22p4Dk%jX`39 2G|Ҥ-ezF#_NH*[o5J[2JԐ"x-]4#j]K|\ QCf.Df )=5JPC#CsFT%-!.BD .R4쭷ȡ C7T=5ADA!&qQw(2G M -\0m#z$)^L!֓0LB.z[rO%PW /2^xK%PwDq}H\ Qs|n[dAEr-oiS/D -_iF.Z9FoɅ@̽xK%P9"k3I[r!P/s`&"b*8j`'aoi5BM|-5&hY[t^\ E3#*zyx1_xK%Py1. 5LQ!n-֓B^D `QlBD [q "zm#FTx2 A'#"F> x1#<ِTمӌmِم(D԰HA9=eF#r!QD dv:d(NFJ 7/\5 5M3t4Q-=Np%j4CR| jX](Vp[܁Qdpbxۈ;2\xQP;;Dq2޺q1Q DoiZ W\æ&MCɈRub•a*aIҤ[t^BD .M쭷T#VW ե;\&w`omT54ÍI6b&!gCp`frř]vU8{ yK.Te!v o"3̆[z(=MJ|jzdt8$I'ꅨ!s͌db4a*L&:ALA#kbdvſz뭷&evt-M:Q/D !6,\E6"r)`ZDq`tF.*b=QCQ1! jwU-@n^D60i⭷eFD+ҳCF--\t 0⭷e[܁bFQ^Ledbc1 Wm#rO41tC揃&2cz\6IT oA9B NuIEЄŸ ĭm6Z[#pA_ĭ!hR T敨'S/p}H\ Q7ޒ z{!jxaW;8I>D|z8ޒ z5IMQp|tx1J oz%j8 .1zK&U[*|-QC`i ؊;`= {K%o5XqkaE'ao:M!QrJ YG Ќ)Y(UF:ATIom0&7=ٿl4 VH7Gs]:ڡCnr[ʹ:"jpOvLnƓ+̆I`[oiۈ[¤` -M#vZ+QCt #b*ㅷR T敨Fp}HJ>ޒ z{!jx[r!P/s/ޒ z{JsE鯩abu# ;a'aoɅ@́zy2e8CZ$JuvD -s7#b*ff\o75XQ07,b[zlkp8# 'vf[*8`u# ;aT Ty%j8 /2͸z-UW ], ] adRNzm#&v9BjwUqvFL:@L`ztx1oI#2I3o(ܢ&xhDX[M8Cu<FNٝ"?y==Nt-QCaA#\%oF>x-Mz("kI7+& r6 b*GozBrG8s)p HU&Wzۈva"3\oAZ)Rp}N GoX3cFdD1aDn"[oI7.!N\+2orm# gե[o)i1.+D @Q\9$.a[o/{oһ;jQxKaI/:dީW^Le$F[ +QCTQlpJ>^tȼSѝ2{ERnoһ^-QCT>b,íV )C>^"OՍ0԰0'IYoһ?/0qS6I8c,[ +^Lx!/FwjpgҌIRDՍ8x-}{53 3?|fJ>^tȼ{-yyyy'j?H#r@,*R +o);QFbQ͔Q\_yKa}}}}މFXTh3@WRXiyyyw4"ĢB)J5@#fJ(>>>>D םFbQ͔Q\_yKa}}}}މWiDE6S Dq}-yyyy'jFXTh3@WRXiyyywiDE6S Dq}-yyyy'j~FXTh3@WRXiyyywgiDE6S Dq}孷Vډ8qkaoBQæ٤ĭ#40 Kwؽ%O0 MfD1y뭷6:p /2bwAI7&B:#+ARt&--\1"ǧ6n"L0F:418I>a vC7Hg\_y(b*ǧkW;8I>D|z8pxm# g:$&H7Y6" ߓtuI"`= {)f.&R8@AmK0SDfD Y6V!Efl6"]|0)t\:I7@c(N:mD%d=E"Qm#(0=fFT !szb\fWU4]6Yp(!둨!YRXi'j؊;Do)XzKLQB#Q;8-e-zh& go))JzJVz:gqkaUFLĈ C!:$4!pq')$&mDSI]81{o?DJo7Q_84"pq'o{?_~DO7;R9$|뭷4{m#H7! KX&auzh1.m#n"Lt0;b])'F$DR1"D!Q]fk9$#p) J6q6ґp4]6]vU8?Ÿ˽δpFwjؑU4Õ+^L-3-\QR8eީ፷δpFwj-3-\QzKL kyR8eީᕷδpFwjko)iz2[ gZ^;5δpFwjR8eީz™(N 7R8eީ[ gZ^;5\zKL kygoFYo&''SV\GoQ!&q| v#b*D(3LQfoQ#t"K| H*ݤSo%>8`el&Gi)z)$zۈv'0]83q,33/2LELfM3/&z(k'jI8]z訁DtQ2Qz ?n set ?n+1 dw ?drv endm if ?n gt 16 .' Too many drives. Max 16 allowed' exitm endif if ?n lt 16 rept (16-?n) dw 0 endm endif endm ; defines the disk parameter  header dph macro ?trans,?dpb,?csize,?asize local ?csv,?alv dw ?trans ; translate (skew) table db 0,0,0,0,0,0,0,0,0 ; BDOS scratch area db 0 ; media flag dw ?dpb ; disk parameter block if not nul ?csize dw ?csv ; checksum vector else dw 0fffeh ; GENCPM sets checksum vector endif if not nul ?asize dw ?alv ; allocation vector else dw 0fffeh ; GENCPM sets allocation vector endif dw 0fffeh,0fffeh,0fffeh ; GENCPM sets: dirbcb, dtabcb, hash alloc'd db 0 ; hash bank if not nul ?csize ?csv: ds ?csize ; checksum vector endif if not nul ?asize ?alv: ds ?asize ; allocation vector endif endm ; defines disk parameter blocks dpb macro ?psize,?pspt,?trks,?bls,?ndirs,?off,?ncks local ?spt,?bsh,?blm,?exm,?dsm,?drm,?al0,?al1,?cks,?psh,?psm local ?n ;; physical sector mask and physical sector shift ;; ?psh set 0 ?n set ?psize/128 ?psm set ?n-1 rept 8 ?n set ?n/2 if ?n eq 0 exitm endif ?psh set ?psh+1 endm ?spt set ?pspt*(?psize/128) ?bsh set 3 ?n set ?bls/1024 rept 8 ?n set ?n/2 if ?n eq 0 exitm endif ?bsh set ?bsh + 1 endm ?blm set ?bls/128-1 ?size set (?trks-?off)*?spt ?dsm set ?size/(?bls/128)-1 ?exm set ?bls/1024 if ?dsm gt 255 if ?bls eq 1024 .' Invalid disk size with 1k block size' exitm endif ?exm set ?exm/2 endif ?exm set ?exm-1 ?al1 set 0 ?n set ((?ndirs and 7fffh)*32+?bls-1)/?bls rept ?n ?al1 set (?al1 shr 1) or 8000h endm ?al0 set high ?al1 ?al1 set low ?al1 ?drm set (?ndirs and 7fffh)-1 if not nul ?ncks ?cks set ?ncks else ?cks set (?ndirs and 7fffh)/4+(?ndirs and 8000h) endif ;; all computed finally dw ?spt ; 128 byte sectors per track db ?bsh,?blm ; block shift and mask db ?exm ; extent mask dw ?dsm ; maximum block number dw ?drm ; maximum directory number db ?al0,?al1 ; alloc vector for directory dw ?cks ; checksum size dw ?off ; number of reserved tracks db ?psh,?psm ; physical sector size and mask endm ; ; ; include EXCBIOSE.LIB .xlist include EXCBIOSE.LIB .list page ; declare the drive table public drvtbl ; table of drives public dpbtbl ; our dpb table w/ prefix public dph0,dph1 ; Built-in drive's dph's extrn stdini,stdsel,stdrd,stdwt ; built-in std routines cseg ; must be in common drvtbl: dtbl ; Note: With disk change in the interrupt routine, the dph must be ; in common memory. ; every dph MUST have a prefix as follows: ; -9 dw init-routine (at cboot once only) ; -7 dw read-routine ; -5 dw write-routine ; -3 dw seldisk-routine ; -1 db controller-relative drive number ; +0 dph --- the dph itself --- ; see the stdsel, stdrd and stdwt routines ; for documentation ; drive 0 dw stdini ; standard init routine dw stdrd ; standard read routine dw stdwt ; standard write routine dw stdsel ; standard seldisk routine db 0 ; controller drive # 0 ;dph0: dph oddxlt,dpbd1,16,48 ; use Osborne dd for now (as max) ; but, let gencpm alloc space dph0: dph oddxlt,dpbd1 ; use Osborne dd for now (as max) ; drive 1 dw stdini ; standard init routine dw stdrd ; standard read routine dw stdwt ; standard write routine dw stdsel ; standard seldisk routine db 1 ; controller drive # 1 ;dph1: dph oddxlt,dpbd1,16,48 dph1: dph oddxlt,dpbd1 cseg ; must be in common dpbtbl: ; each dpb is preceeded by ; associated device type code ; then sectors per track (actual) ; then addr of skew table (or 0) ; the table is terminated by an entry ; with a sectors/trk of 0ffh ; db disk-type-code ; db sectors-per-track ; dw skew-table ; lbl: dpb psize , pspt , trks , bls , ndirs , off , ncks db dskd1 ; Osborne ssdd db 5 dw oddxlt dpbd1: dpb 1024,5,40,1024,64+8000h,3 db dsks1 ; Osborne sssd db 10 dw osdxlt dpbs1: dpb 256,10,40,2048,64+8000h,3 db xerox ; Xerox db 18 dw xrxxlt dpbx0: dpb 128,18,40,1024,32+8000h,3 db ibm ; IBM db 8 dw ibmxlt dpbibm: dpb 512,8,40,1024,64+8000h,1 db dec ; DEC db 9 dw decxlt dpbdec: dpb 512,9,40,1024,64+8000h,2 db 0 ; 8" sssd db 0ffh ; end of table 26 dw stdxlt ibm8: dpb 128,26,77,1024,64+8000h,2 dseg ; ok in bank 0 ; these are the actual skew tables oddxlt equ 0 ; no skewing needed osdxlt: db 0,2,4,6,8,1,3,5,7,9 xrxxlt: db 0,5,10,15 ; physical equals logical db 2,7,12,17 db 4,9,14 db 1,6,11,16 db 3,8,13 ibmxlt equ 0 ; no skewing needed decxlt: db 0,2,4,6,8,1,3,5,7 stdxlt: db 0,6,12,18,24,4,10,16,22,2,8,14,20 db 1,7,13,19,25,5,11,17,23,3,9,15,21 end : dpb psize , pspt , trks , bls , ndirs , off , ncks db dskd1 ; Osborne ssdd db 5 dw oddxlt dpbd1: dpb 1024,5,40,1024,64+8000h,3 db dsks1 ; Osborne sssd db 10 dw osdxlt dpbs1: dpb 256,10,40,2048,64+8000h,3 db xerox ; Xerox db 18 dw xrxxlt dpbx0: dpb 128,18,40,1024,32+8000h,3 db ibm ; IBM db 8 dw ibmxlt dpbibm: dpb 512,8,40,1024,64+800 vu5EXCBIOS4.MAC\  !"#$%&'()*+,-./0123456789:;<=>o?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[/kgt5?OZ Y׿x< ɳ?4'ԂOo??`X3j_=y I@`%UP;k$xIcs XSY@>s({yYST 10jΜkzk_^§@Y{MݿNQ赳O_/^Dx?랈^;ko_;k ~/KKp)'z&^;k ~/)>ovMY{MxۇT] |oY{M~Y{w&{.8'׿ zƻר&n,xuBΜ5z#j=ג2^jPR-^C8hѺspO^ř3gӯ>z~ՂWYpusW7Wo<\<~O޾竏 j՛ ի_=yu ϲ35ׁ–5xof/,^3g4ky K/A%h5Z8^xI EG `eVޙ3gO^dD ̈ {gO¸ʚ$'qE-S$gOeX/ 9s5s!L2t a\3F>9s̙3<*5ep1mk*;|H{̙>:k=YK-Ij,H!({)*rVw8hՇ*{a`BPYs^=O˧7ΨĴaV"XS9s:shJ9C!ҫǚSTLʨ_=$FgΜ=\|[gY7G;ޢDS#73zq̙3g~խhv<3$Yû:kt{ ;kΜQ5Qhv9kY#) :C"<Ι3gW77Ͽu֜5z`MeV֗Mga2o++O:kb0k-g$wMO#kKgY7ӧ7Ía2o+zonsZ>qFW7Μ9sͭ 3<eVVLQ"Tr _ZG$5ΚFWnOop$*ʼΚ3ge3 <eVVgT@Rx1{Zϵ8yy8-|0IX1{vFW7Μ9sϯ~㭳?Gc:u&VLy3=+;sFc:3gWo5g9$x$*&3T9 hՇC,9kt˷7w QFw {!^XӚqfUΚ3g^#QC&ς8A9 T %z jYq Tə3gYsZy ?PA녝5g><ObagY_u_P'V5}_P'}2X5Fw 3%5g( !NgAp*cT3gpK9PKQ(5qZIb|&jH% N$"JgŚΙ3 Μ5 ) *Z5 |ɳ`ҸKRA zcQyOt4R t,rc{5fU.0vgBD =ߥqA04R #(J˱QCΨzvF9P_=zuF9P^QCw8K-:#{>5iD c #ݙ3g4x>;sFc:3gg$eHg\8{h={HgxI%$ s)qq)Wb[E4աƒB'gn:{6{ʨ\b bMe뗸ǡRpұ5 8zf5^cR.YCCǐrt|zggΜF^B-Y#!ucR\&9j,ԨD鵜9sY#/svֈs)qsA9kD*g.Y# qw:Dx.*{Y#:怴0^| Մ9b8O(|KCR#e,\DL)EƎ)*'Azagliw NuFE,\<#pUΜy -iXՀ竛913QË $bȜ3ʁz^|)* %T|HI:+|ytF9NiI8pُ7ר@G?iID a޶=GvFBD Se.Y#3e>n,όCO*8$s[ʁz^¸ʚaHD'HZ3;(5syO Y:8 \D<<5L<+#΂CCGWH@i9Ad?! 2:3F:|"jic$C .?9ZꙨuFH@i9|"j8IIkfgB|]<$P= ? d"wFH+QO#yHA녝 <@ {Oq.UyInQgF% NfvF/.T5x=M/3J!PK`uFHD'ѽ3z9瑨!= ? 9k$zTQȊ0<穄[eFD0:#~KD 1 $Bz .{g4Ƒz&jP1B"؝8N=;sF9PZOD C;>`uF9бӒj0vgT@=;Z rQt$g(Z!NgA-Ǝ)*¸:QCwa?sF !] A'quF9бD ca\BPjgg{>-!%rgqFcggΜ5! ^^Y 1Ekf/YT9KQ' kF A5.3 d?2&¸bT3g[ʁrD0ayf2P(*{>5k %Pge/QaH!({r6gӒGlsq9u^z&j|ro(@=/z c($"@i9|"jqBW2P(˱QC¸"(K"jNzg5 ;#$ Q=FVaԳ3 {gHYQ!ơJΙ3gΜ548k%Y#JHo?ֹfy_ qJpֈZqZ虡—Va5^̙r ^@ ) Qы=5 qb) *Z9rK9/QD # Q9kn5g^%聨aJ9Cΐ!n[,8K-9kn9s')摠"UYsֈ.NgDGVhܠqZG< *3gμ=5/[ceX9 ls9(-4PD Cz=ED TAR 5A1Ĺ~wF Գ3 <бQ6gC3z1ED wҫ6{ 8a8sF9PZۜ%Np}}YjD988J6gG 'gbuу=5(8Fb2PD @"((JpA Q1E~98ac'!z8A4 ?9#}]P⁨a~r cR)C4 ;gΜ5*KD!zHx |ڣ \q猞R"j/f/2'ELQQ"X) 5OU<*8$s̙4o)q\ip}rF9бrOYy@"9sDU9@z3g)05tahbɳ8#gh*~bŧpIZӚC"?KҺfΜѫG8gE~1!{g5QQ=$ {hڜѫGfy?[Zw?SCrwF>;sF9PZ{/'jσDEY@4$gÖ!/I3RrcRҳ3ĝ2o++σD(ZD0E —Vagxr {HDH)~Ca)*X5w8RD ^24nP)H!(wꙨ C"Ngqr\w-U :3Rꌆ3{&jR8|r8R`e/Q7i,(*%+C:+#=X5wF/.z;$@ř3gݝ3g>|y֙F71Ŝ㡖3GZqB.̨ų <ٳF?? D(QƑB"z*!3(0TQ*S93btO#hK3Fk ;k$=  365a詜xuc8kT< 4R J:tƔVIgF q )=ʙKcstv(a޸H $aI 5gHZԔpoJt.PN*u@:;k^^p:T\K{(!QPF _y+#*<cdhvqXN+A,(|@~@:;k,I77?ۻ:kvtF1THTQq9ce  *{(o 6^P#='tvH9j *ST$x$*.)׀X QCMF$Uy{TPt欽wg=1X5ό:aPʙ3g4ξS|0X5*XB3g)0QO *)uF;QC*S%9!Lg%pό:*{gB|] L s`Pʙ3gG95x.w <36F98ay#+DӰ3zT.~= z0ʙ3ʁz^b8`ըΜGZn $=ֽ3HN:1&ϼyHgQރU:sQfAg1j{Hgjԗ$8K--QUbcә5=$BYtY?0=$ʭFUb4^^Y#bҸA tFYjal({H9CJuֈN%BYt@Yf-`ըчjq挆3y JP^X?㸥'gB|]PqD(9CRPgAbsg{>-D *=΂r49#e!TR3g΂ |Kci65Ǐz*g |TqFc)3Hi"j2't4STJ(@!MSD8Ԅr^(!R *8|A1m,9ٙ3ә9m`Hg aKΙFS9j9#)#ar=Ē8|ҫwha̙FcҴz8 XkPE~%:s,h-aU wrNR/,-]SC A' Za8z{xNΜms55HgDEw|53Rꌈ9K;HA녝Q],5BzZ/Y#@< VF-^=-D *=΂r49#e!TR3g΂ |Kci65Ǐz*g |TqFc)3Hi"j2't4STJ(@!MSD8Ԅr^(!R *8|A1m,9ٙ3ә9m`Hg aKΙFS9j9#)#ar=Ē8|ҫwha̙FcҴz8 XkPE~%:s,h-aU wrNR/,-]SC A' Za8z{xNΜms55HgDEw|53Rꌈ9K;HA녝Q],5BzZ/Y#@< VF-^=?@ABCDEoFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefDH O>$Ka_qƗu~=GՒg ⬱aRPC >WuCYM4Cpcz8 )-fv.l!&xvg4DQ{F؇2"dgkgִOi?yo{}}$Ꮛz"hM髟oO~ hMHњ%ִOi kq9F}}$b"ִz'x8Hњ>5#>:n}tY=|{ִnPOuWaGAFhMHњÙ5XHzv5Q5JA:jb,!Q$p~Ѡ*zHg*k('ΨKA(u4*3jx!NxP93ŚFCG& KAyhHXran~<7'k( 4-4rxܳC(ENg[ha(6!GT G'ttF#BL8d麊5V%~ Y=sm͞:YibBg0Fk\ʱ51x'oYd'Xc Pr:tTסJN89I=58IH*{xסJ}D }QCڂh5ė#Umm1XC|)>RըLUcS՘XC|)>o5N3_J d. @4YC|)>Ҭ{.g35,Q1xk/GJ~/Ce(PUAYxC=:k!鷙SD 3P{R9b!)}7Rz\yHc?9k/GJ C!j0.HprXC|)>˛MԈ FAU!),{D 9fɡ TxNs{YC|)>R}ϡ >WFY!!OX#> Uq_|(SpE={n!7sb a q(k/GڳwD {.kD\=g!R|$g*C*:]h5tt}sqyn~<~^5t7߭ƚFm a AUF@mn׉/2kJ5:{(j(CRg5:r$D CR9Rq,iVD CRǂ4b q&3j!QukgN U-'={5PItԋ5T2yrN !&^ZAVPItݗ_Χ^y OQCGPƚZ2^QI˴#J4! 58 !J4ϧ^ !%QߠICPYc0nw]'jág8ZCƑw3XC5Bݮ+5w Gk!3`[CFӠ*=5lMέmbBqc5 g/T Nr)BolƚFH O1˞+BL1 7k$J<%PrN |Qk_Lgoo.>y|뛋 ki$; q0zkP}cC(g_–3RvGk$e1˞+5Jֈ=WQﬡ([{Ԑ(3\h펨pHY(u5~ έ'Y(\kڇ'XcM@:ñϡ >WvXHg$u(FņI#?w!l_Q5qQv9f8ut>H ;8 41 CRHN}kJN˯?@HAEu$5v%Ξ!CHϕquJžQ}CYJ152QQG5cJ>Hϕk(=cTF >Wv8=kQY ;jwXӈCHcyɗ!`=D"r4##;P 'D=@= -42$lMPC5PI˔^B @i'g Dtg3RvGgM9DL9䎿Pt>!,b :R/D g$`54HC%jD=J嘓;5cR;"gg YCFҖ! G3tkr"jHZzvH>>Qk58,c5R^D )y肐.1 Dk$ Y/D cG#r)yk(JXC%Qz9J2^^^WɑR5<{g#rNԠQ^WɑƚFJA8d1M.%Y9QP <(|k$J<aB:cf†jUau *95TӮ5,+cQ !t:s[w>kRHW݆!;2\DkQq['<3:@QB:r%W'OXC%Pnש+c7!dB<uD x:{FPI˴ԁ!dCGZC%QI:/u1x*:-u(pH.KJYL09Zc =0 QP8&AUưakuJbB$DqX'ATk [ӈΌΞqq`lT;W]5sH9nPชz u³5H|GkYS:>:?"{Yӈs+' NxFqXc͠*QCvnen9n;W7T*znw*0 DQ@WWh DAUf5^=fj(tms+Czvٹakz+z橇!j(#go5 25Hg\04"ew{9bPk(oڥ>Bvo5:{W!A'k( t: <[d vOЧ5v3fkt^`M#tRhHp# \ؚF!#'tr45Hֈ_+N0qAUƚVvCg80 JXct^pEitq1pNO_9Mi75ٚ[ߟK_:PágHgD%sI8R05MigR‘J\:/uq# D,uÆ 5TgXsT劬ȍoC<958#zƚFXytc0vB<*tK԰E1xĭ5TC)<5,\WbBXӈ[kc0v:<5T uv2v;1Hֈ!#nJYLX g̺gh DLD $kDB<*O{+#G !JN&jeF:tAyֈ9XC5Ba=# rƚFXxΣCÆ^!PI]No^AǪlw> (Zn DgO!Ąvvk$e: 5QH2k$:=z!j[C%Q/oo1 3\S/D APb[cM FQ&dcC(FZc5kk͚9jbkp١7(Bzkt yt6e쐝5H: $ ^MaPE#bM#r[hHXraC.u|RuY]@0kKQ|;E։5XC5B SFgki0a=C:9b[,^g !Q |uFkhvtIAF !qk P ]κgQ<[`=#GkvD $kDB<*O;1x*::԰Gḑ]Pl P ͺgYZGh YCF15Qdk.5H#CX8 ['8 {AUέiDytPMX#k]r+k$ nNpΑ Caف6!Gk$:X| Ԡ{%ls@:GCRvb5tQC-5PIt/SzQQl×_ϧ@ kk$eYC%Rϧ^(ԁaB:c5TIGD :rtƒ [C5BCRg @p3B{/֐g@԰eϟ#*5%ky K.E!!cFFMq3[Hzv8- u*O2/á? ?"5K.\+W)1Q {F^ÐԡRJ:94jrtl P I5PIxZ@0 D*9$kRhH<Y=&PชzkQGJLىzFBJJ^_>YC!%eJL04<;g %%z!jH: !%Yc @zXC<=LK.\Fj:21XCF15%UYpYpȥ )jϭưakxc53-E9n/ݞOkƚFNhM#bNq [DxikM#,8=Dg \Ng[kq+k$ o԰[:*{n0g X)5d!qah yz jز,~{n5TC)40D ]]}D Nk$J<9.Kp,k5ZC5B.l{RpA|3?g*O6 |) W6P P8 QCvne_ DQ5:-l5l5wD^p`kI,~k }c,~=Zc54r{ksHP`iDe^#*<Nx 4 ޫGŐ˹5ZR uٚFL^gxeq,8+พ[cMyuϲA#rW'N=WǐYC%Q~c?'>18z!#D:P5T5Q51' ϭ!BD [vbvQYkh\]5gQ5uJLžԈj(摨k<1I#[c :Rb |z^"BJuJL0NYVPr*WnjsHPP !YC%QɧFjέ3# yzaPIx:R#5Dg#5tE5B.l{XX%kD =[c :Rb3D54HC%j^/G@}=$u`Q554Sb 3D,YquJbԁRj54.K`;|A@K8rl5Ti jXR J^&'Ad(oaI]0 d(X$H(J5DPQr%P j/C^yz)I =42 4Zc %U8 :=N*ҴJ"z9'jذ@zv54S/D .G !%o DLNnC @NmF#{k(DLF(g FeO5:&$~ϳ`Qab P U5=gl5T%scAN3;6쬡Jqvkhԑz!j`o :RX%U8 :kq$=&'AH y$0dqXC%QjmI!qiz@|i P Uې5Ш# %UTMQϭquJb‘y 7Ȃ!ԣ54__^n(LQÒ*&j(:_*D K*ty"j8p j(F]*t(԰";qҳCP PK]UMvɓk$!Dj(F]*z$xAgEn,a'Oh>5, VYS5qp]9nJ.*t9QCK(Rvc [kh\]ZC:b P uURvc [N/QGuZC9VJUM\FX [ag5T%&昨!;2ć\CTMmJqvkJ58f:KgQxY|xYzarR$j i QY]g[!D41#/9倔jqPIt{>:3֘;k$ Y6,#GaC!! ֘sk虧܎anB/1J^!sj:ab:RVؚCp+*t9QcF^ ={F akH=k虧ɳ! RN*= O,~P8Yc Q {(97XJ` [c DSPCP{g-:zkRj D 9"#زzDllpV5J+u^<;QC3PVk虧IJ!*f!*<"<5Хz D wPItBL)Ծ>a @_!PYƳ-B)z4aQ_ʱR j=ß^Gg[ki3DYV!Ja³-^{IJk uBb3\s_2{khԑj DaD g I{,%lF)1Qg'^gx)y5֐g!}Æc5(>WFT琶4ʐp0du`cf†' Xӈ4-DQ<<e5iDU9l103 s'4\0N00!Ąۿ:HgxvF/#݄5&">WF gꙣ5=}E'pם[ nB/#zW޽}ANE؄[pK "ǔkFg$Md Gtg5/_\}3Rg|N5]\͛W^S{9 D:'UQrdk.fz|G^iQ%G>9UYC?~0!g ! W=skήo.>SʂձG%GNH\zDHk:;݇=#5z=b'|cafao ѫSgRy!z]XC+za ѣaXͫo>ڻuYC.%895F YznԘr <ΚfM}ٚfMo7F(!GUQrdk7?B(!GUQrdUYӬ ?ߟ,CGk.tGZ=;1Hh 5]L{OԾĊ!#p]\٣ww/|zAcafaבּ_L>:%G.j 5]Lo޼5;1H]0랭!wOO;FXX%GyWF,XCtqM/ON"8AyXQrdk.fz|G]\ӻӧ5yW"kyWF< xGT-5ck^}ƚG7_>#c=;|a ;,^g9 {B:'#[(ĄO; [a(Jp#c+*lM͋Ǐ> FHɳs3;6lM#k<;]D|VagM͏FYc ѫ Q{FyX1jW߿D>3;6QsXCtqM刺ٽ'jsbŢ$k/n:|NԾs !!鎨z8]}ek.p>vς10wXW/_ v/AV ƙW>⚮owv]'Ċ#,d]\ӻӧ5DO..7oZc ѫQyX1jkv>[CtqMNv4w7__R Xӈ<ky͛W4ݱCϛfx]%G(ćHAsYh^=7ão|blGZ}t<{8s̸ۗnM͋Ǐ> ƽ2/)yvΚFt}׸f'9$xAHɳs4wOvޚfMo lMW߿?!zzwqA^yW/_=yl ѫ7Xc5X(4CVҳ{g[Ɩݹ5HU2a:jk;zE5B՗IN(qvjٹakRj݆AUXq$Jor k:_e{ED )-3#a(q 'k(D5Ȃ5TGڅNԐ <_g5R0#QCHV'X#<_|(L݉!PrBK|*F#D 5lQW!jp@UHϕưaki6gkQn,am0j !QWiD9…-N9n|3.N4"QT5ָM>g!juXjD 3[c DgQ 1saPIϩaÂ!CyPHt;5luQPP{PIt6ɟO\3r6XS5nsE%Q/SըP(E0tqxгtmBLUU =fv.ldžm |)8Rh)zkiT}YiDʸ / DQ5*X(4"]e\՗Jы5T_+*zF]"J QT5D>*OP(63O6D !&$Ek"8tŁ<[ӈۗ`ɇdM#EըX _!G[B78a:jNf`R5D>ȸub5X"jG[B78YC5BUcvBԐg%Ǎ540zs丱j(,= !K dyZW:B+jYӈrDḑcN:j>TaĚF$=;dcE=3r̒CAэFn3YӈRvG1sax+C̺ fqX(I]N#YcMRb'^iF`v p:Q/4(#Cʸ jg^gǐ՝[ӈd;J٢jUUWܚF4zvʸ5XHW)iD!"a08Bʸ fv.lx° 5pHGvp#׼dNx3;69liDQUu|5j>Ta 1Yc56WT nשay^gC9bvkU +"jE W8 '6(7ҭ(Lgϩ!!!;H~1XCaϟ#!5T)PCCCWWu*5gÒ*Yfv.lYc \58 ^ $ YR@sHӴfI0^QtYU ӴfI\Q贄iY+JEטNΚ%NӴfI84Щ)H8M;kTvEiSNΚ%m( tV=M;kqDrE a( ]pa+ ]⬡4ВjϝJ-Nnc Ts'Af@Kqy$6PhIIm4ВjqIm4Вjߞ; 25ZR XcMcAc`90G8 :_<+J&5XH:cRA:pHsĢ/Q51t{ޚg@CNgU>M;)Ϙ55UsLWPt~n>NӎcB3fMl5d|a ;,^g9 {B:'.z80 title bios3 (excbios3) misc routines (memory, time...) ;**************************************** ;* * ;* EXECUTIVE BIOS * ;* for * ;* CP/M 3.XX * ;* by * ;* * ;* Glenn S. Tenney * ;* and * ;* Roger W. Chapman * ;* * ;* Copyright (c) 1983 * ;* Osborne Computer Corporation * ;* * ;**************************************** .xlist include EXCBIOSE.LIB .list PUBLIC MOVE, XMOVE public sbank,dbank,kludge ; allow xmove's PUBLIC SELMEM public time public torom ; to rom and comn stack PUBLIC ROMMV extrn dmabk ; selmem must set this too cseg ; common ;;;;;;;; warning !!!!!!!!!!! ; Read the DRI documentation carefully regarding ; move and xmove. They may not work as you might be ; led to believe from some of the wording. It is ; like this: the xmove most recently before the move ; determines the source/destination banks, any move ; resets an xmove setting. This version works with ; the stack anywhere (it is saved). MOVE: ; ; ENTRY HL = Destination address ; DE = Source address ; BC = Count ; ; EXIT HL = Next destination address ; DE = Next source address ; re-done by Glenn Tenney 1982-12-17 ld a,(kludge) ; should we kludge s/d banks or a ; 0=no previous xmove jr nz,maybed ; previous xmove, may be difficult smove: ex de,hl ; simple move ldir ; just move ex de,hl ; leaving regs aok ret ; and get out quickly maybed: ; see if a difficult xbank move ld (savesp),sp ; save crnt stack ld sp,comnsp ; and use one in common in a,(sys) ; current bank ld (ubank),a ; save current bank push hl ; save ld hl,(sbank) ; get s and d bank ld a,h cp l ; both in same bank jr nz,dmove ; no--difficult move ; same bank move (but may not be current bank) pop hl ; restore hl 1st ld a,(sbank) ; desired bank for move out (sys),a call smove ; do a simple move jp done ; move done, reset s and d bank dmove: ; move between different banks ld (rsbank),hl ; copy s and d banks for rom pop hl ; restore push ix ; save ex de,hl ; make regs look like ldir call rommv ; off to rom's move routine ex de,hl ; and back to d.r.'s way pop ix ; (used to get to rom) jp done ; and all done rommv: ld ix,(rommove) ; get address of rom's move routine jp (ix) ; off to rom's move routine (ret back) DONE: ld a,(ubank) ; restore current bank out (sys),a ; all back to what it shd be xor a ; clear kludge flag for dri ld (kludge),a ; no more xmoves in sight ld sp,(savesp) ; restore stack too RET XMOVE: ; set for cross bank moves ; ; ENTRY B = Destination bank ; C = Source bank ; ; EXIT DBANK = Destination bank ; SBANK = Source bank ; an alternate method.... ld hl,sbank ; pt to 3 byte area ld (hl),c ; source bank inc hl ld (hl),b ; destination bank inc hl ld (hl),h ; kludge to a known non-zero (h) RET PAGE cseg ; must be common SELMEM: ; ; ENTRY A = Memory bank to select ; ; EXIT None ; ; USES A-reg only! OUT (SYS),A RET PAGE ; torom ; calls rom with a common stack not user's stack ; this is for the tpa user to allow calls to rom ; This routine jumps to ROM address and switches stacks ; ; ENTRY E = ROM address (offset from 0100h) ; A, BC, HL, IX = Any necessary parameters ; ; EXIT All ROM exit parameters remain in tact ; torom: ld (savesp),sp ; save user's stack ld sp,comnsp ; pt to one in common ld d,a ; save a in a,(sys) ; get crnt bank ld (ubank),a ; save for later exit or 80h ; force into rom out (sys),a ; now ld a,d ; restore a ld d,01h ; de=01xxh call romjp ; off to the rom (via our code) push af ; save a and flags ld a,(ubank) ; incoming bank info out (sys),a ; restore bank now pop af ; all regs now restored ld sp,(savesp) ; and return ret ; with user's stack romjp: push de ; dummy up like a call to rom ret ; off to rom (addr was in de) page ; time ; this routine is used to get/set the date ; and time ; the time is being updated by the rom interrupt routine time: ret ; do nothing ; these are areas used only within this module ubank: ds 1 ; save crnt bank here going to rom ; or when flipping banks ; these are bank numbers for transfers ; they MUST be in this order ! ! ! ! ! ! sbank: ds 1 ; current source bank dbank: ds 1 ; current destination bank ; this is a kludge because dri calls xmove then selmem and then move kludge: db 0 ; nonzero = use s/d bank end the rom (via our code) push af ; save a and flags ld a,(ubank) ; incoming bank info out (sys),a ; restore bank now pop af ; all regs now restored ld sp,(savesp) ; and return ret ; with user's stack romjp: push de ; dummy up like a v EXCWTSYS.MACZ  !"#$%&'()*+,-./012o3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY/?¨YAU[zemw/͠**͠.(,<~|~%DjV=8J" =y5k). 8B973]ӭxo/|O[!x}_>-x[Ax<Ӈᯉj/;JW77 <>囗=W?wk)(Y_= <Ãx~mە˧I׏<ӛmv%mf <ÃxxS#8 )]A3+hn 3xTjNxNw ȃ4GA /Huၕ Bp !Tfll5$aaL=z3Ǩ6˜`f! c詬VusV kN$:GjBJm͉1y=:ߕzQMA'rO{E9SYj!)V֜H)5DjBJm͉1y=J9="GЉ c8]qkHD#8/#0ɹI)gs&-֜Hۃ:J9="GЉ  )E™`!(xUXxl^k'WQi.9y7Љ nrHdLeOߧ!GD 9B5\vKaLTs.RͶ+ j`HM c򸴒9Q})%a@cY\OQLomWaaLCLBJd8 XEPa " G =*\V` o 3['Љ bՅv])u]t) 8 ˜<4d(<> /o8 )] `+%[LH;.d {'dKB0eNXXXXxL[xBHa!ǸIox6$j\'aaa‰\V ` NV9P? RSsಒ@Bu]#55urop_N 7u~wJb 3XvH!uO ԅvq',,|pY &BIA =%Pڅe4q@$BW:z58$?#V * c򸔀8 3\58$AL DRs18D 9a̵a@{؜mҕ0&J1Bp"u]@煜0&UwqW0&,E5G"55A .+ c򸴒-QI'/f(c9,^\al 0&S*݂#Pom&Pڅ0&")G c򸔀8D ? RSsಒ0&"5zЉ5\VBJlFsz䜹5oёg [%8%\Q,U9-Hx5'Q!WD1g4[ _t kN9m$<0#]%G"{H  :P-{$SB?;9 ۨNTQSD¸q)!L{'NxzԁmqJ8vk 3AVH8 ql~(ɣ0h]ASDPL˜<.|\zBv&:\qi9F˜|v˜}fRh!E\Z}l-Hxcsp9,"OMՐn/To?3+9iAqoVuڝAp~87ppY V඿v'|Pg ;e%p6_FpaڝNy[qԠQUX",,58FOI_~p)e%xCJ3 "x?] _0o*t#~$~˯WQiu]DvqYJSv),0 4gPLb '|y)F7#F`Sa*Sv)ŽFO\~q8 >|O7~*=LjXF] t v?r9sppYs=AJ3 "^T.] 'xA`Sa*_3wmw/͐#$Ka t?rRXXxN9BIV؂#l!F:8e%8}݂08` B{wA# q@;Pڅ08`YKa 6H8[t㷷݂#HTO:v&7Љ 0{?y^t)K/K/K/K/K/KnۜF`/oGo>] ?`/K/K/K/K/K/҅[n/|F^z饗^z饗^z饗^z饗^z饗^z VuF`/o>] ?`/K/K/K/K/K/҅Wn/߿o>] ?`/K/K/K/K/K/҅.7o>/^t)K/K/K/K/K/K5k~7TShS'rkZKN\ _ɝ"3K`(kN t" ӇQ`t"WQiƧԅvuh3IX8R;" D NVȿG!;PEdt']#p~Hد Gjϐw=3Hڳc~&.tcv~F1R{xp@Bp{#p~H~L8R~H_?Ԏ~Hc~&.#‘tcv~ Djj. ԎH;Fj_?ԎwԎ׏~L8R;>C1R;{] ?`/K/K/K/K/K/҅[n/|.z80 title bios6 (excbios6) LDRBIOS cold / warm boots ; 1983-03-20 set for 1st release ; 1983-02-23 nop support of err msgs (disk, dev not rdy) ; 1983-02-22 change name romjmp to torom ;**************************************** ;* * ;* EXECUTIVE BIOS * ;* for * ;* CP/M 3.XX * ;* by * ;* * ;* Glenn S. Tenney * ;* COMPRO * ;* P.O. Box 5260 * ;* San Mateo, CA 94402 * ;* * ;* Copyright (c) 1983 * ;* Osborne Computer Corporation * ;* * ;**************************************** ; this is a fairly stripped down bios allowing the ; std bios to be used as much as possible. This bios ; is used ONLY for cpmldr and could be a single source ; module, but uses the std bios disk drivers, jump table ; and misc routines (move etc.). Obviously, the boot ; functions are different for this ldrbios. ; This module written by Glenn S. Tenney ; include EXCBIOSE.LIB .xlist  include EXCBIOSE.LIB .list public cboot,wboot public area0 ; so we can know where i/o area is extrn drvtbl ; we have to change the drive 0 dph extrn setbnk ; init the bank for disk i/o too public devtbl ; the device table public devini ; device init public conout,auxout,list ; output routines public conost,auxost,listst ; output status public conin,auxin ; input routines public conist,auxist ; input status public stdsen,stderr,stdnr ; err msg routines extrn torom ; off to rom cseg ; to be like rest of bios cboot: wboot: ; we have to dummy up the bcb's in a,(sys) ; current bank call setbnk ; this is bank for doing all disk i/o ld hl,(drvtbl) ; pt to list of drives ld de,18 add hl,de ; hl=dph0+18 ( dirbcb field ) ld bc,ldrbcb0 ; now store in addr of 1st bcb ld (hl),c inc hl ld (hl),b inc hl ; hl=dph0+ 20 ( dtabcb field ) ld bc,ldrbcb1 ; now store in addr of 2nd bcb ld (hl),c inc hl ld (hl),b ret ; these don't need to do anything page ; just a very stripped down bios ; the following are dummy error routines so that the same ; disk drivers can be used by ldrbios stdsen: stderr: stdnr: cp a ; force zero flag (=no retry) ret ; devini ; dummy serial device init devini: ret ; nothing for now ! ! ; conout, auxout and list ; output the character to console crt conout: auxout: list: ld e,cout ; rom to type a character jp torom ; output it and exit ; conost, auxost, listst ; all return aok now conost: auxost: listst: xor a ; all ready ret ; and done ; conist, auxist ; just check status conist: auxist: ld e,skey ; check keyboard jp torom ; let rom do it ; conin, auxin ; get console character conin: auxin: ld e,ci ; get character jp torom ; also let rom do it ; devtbl ; only a dummy table for cpmldr devtbl: db 'CRT ' ; device 0 crt db devin+devout,0 ; i/o device no baud db 0 ; end of table ; the following are the bcb's to be used during cpmldr ONLY ; they are dummyed up and used for a non-banked system for ; booting from drive A: ONLY! ! ! ! ! ! ! ldrbcb0: ; for dirbcb db 0ffh,0,0,0,0,0 dw 0,0 dw area0 ; i/o area db 0 dw 0 ; (link and bank for longest bcb) ldrbcb1: ; for dtabcb db 0ffh,0,0,0,0,0 dw 0,0 dw area1 ; and it's i/o area db 0 dw 0 dseg ; so areas appear last (I hope) ; ; WARNING ; ; the i/o areas are equated so as to not take up ; space on the system tracks. Therefore, this module ; must be linked LAST ! ! ! ! ! ! area0: ds 1 ; the end of the ldrbios area1 equ area0+1024 ; the 2nd i/o area end  ; conin, auxin ; get console character conin: auxin: ld e,ci ; get character jp torom ; also let rom do it ; devtbl ; only a dummy table for cpmldr devtbl: db 'CRT ' ; device 0 crt db devin+devout,0 ; i/o device no b;; excbiose.lib ; ; these are common equates for the BIOS ; ; 1983-06-23 set for 2nd release ; 1983-06-83 added equ's for device time-out sys equ 0 ; port to get/set crnt bank sysb equ 3 ; port to set clock frequency ; equates for various drive types dsks1 equ 5 ; 256 byte sector sssd dskd1 equ 0ch ; 1024 byte sector ssdd xerox equ 1 ; 128 byte sector sssd ibm equ 8 ; 512 byte sector ssdd dec equ 8 ; 512 byte sector ssdd (+1/track) ; equates for serial device table characteristics devin equ 1 ; input device devout equ 2 ; output device devbaud equ 4 ; selectable baud rate devser equ 8 ; serial device (xon possible?) devxact equ 16 ; xon/xoff active ; equates to rom routines used rsec equ 5ah ; bios level read sector wsec equ 5dh ; bios level write sector senden equ 60h ; sense denisty ; serial device routines setbaud equ 24h ; set baud rate serial A or B skey equ 03h ; kbd status ci equ 06h ; kbd input cout equ 09h ; console output serain equ 18h ; modem input (A) saistat equ 0ch ; modem input status (A) seraout equ 1eh ; modem output (A) saostat equ 12h ; modem output status (A) serbin equ 1bh ; printer input (B) sbistat equ 0fh ; printer input status (B) serbout equ 21h ; printer output (B) sbostat equ 15h ; printer output status (B) parinp equ 51h ; centronics input pistat equ 4bh ; centronics input status parout equ 54h ; centronics output postat equ 4eh ; centronics output status ; ieee 488 interface rom routines ieistat equ 3fh ; input device status ieostat equ 42h ; output device status ieinp equ 45h ; input char ieout equ 48h ; output char ; the following are equates to absolute ram areas ; used by the rom dmabank equ 0fd4ah ; bank for disk xfr dmadr equ 0fd4bh ; disk dma address actsec equ 0fd4dh ; sector acttrk equ 0fd4eh ; track actdsk equ 0fd50h ; disk unit acttyp equ 0fd51h ; sector size rommove equ 0fd44h ; address of rom's move routine rsbank equ 0fd56h ; source bank rdbank equ rsbank+1 ; destination bank ieadr equ 0fd52h ; ieee device address ; the following address defines an area in common ; as follows: ; ds 60 Only this many bytes ---> watch out ; tbuf: ds 100h (for xmove use) ; ; therefore, this area is being used cautiously for ; various stack usage. tbuf equ 0fddch ; start of xmove buffer ; this stack is used by xmove or serial i/o savesp equ tbuf-2 ; place to save incoming sp comnsp equ savesp ; and a common stack area ; this stack is used by disk i/o routines ; because of error messages it is a different stack dsksave equ tbuf+64 ; another 64 byte area dsksp equ dsksave ; and its stack ; these are areas in rom's ram which are really ; primarily used during serial i/o and during ; cold boot time for initialization. They are ; included here so that any changes to the rom ; require only this file to be changed. clkptr equ 2000h ; ptr to seconds field of time-of-day media equ clkptr+2 ; ptr to media changed byte w/in scb adrive equ media+2 ; ptr to media change byte drive A (built-in) bdrive equ adrive+2 ; ptr to media change byte drive B (built-in) kbdtbl equ 200ah ; kbd masks and decode tables (11+320) ; immediately followed by fcn key table (512) hertz equ 2355h ; clock frequency (50 or 60) ; this is followed by cursor type, bg type ; and key click. These are init'ed differently. ; these are the protocol bytes for the rom handling ; the xon/etx protocol. aproto equ 2008h ; serial A protocol byte bproto equ aproto+1 ; serial B protocol byte romxon equ 1 ; indicates xon protocol used rometx equ 2 ; indicates etx protocol used romver equ 00feh ; 2 byte rom version number ; of the form: DW ydddH (year day day day) romprod equ romver-2 ; rom's product code and feature code ; special override equates ; these specify the area on sector 5 track 1 (after ccp) ; which allow the disk to override the assembly of ; various tables. The table begins with the 2 byte ; version number of the bios. No overrides are processed ; unless the number from the diskette matches our own number. ; This is because the tables being overriden contain ; actual memory addresses. The remainder of the table ; is best described by the following equates. ivers equ 0 ; version number must match idrvtbl equ ivers+2 ; drvtbl tbl of dph ptrs idrvlen equ 16*2 ; length of data part idevtbl equ idrvtbl+idrvlen ; devtbl serial device table idevlen equ 16*8 ; primary table idevshd equ idevtbl+idevlen ; devtbl serial device ishdlen equ 16*4 ; sahdow table idvini equ idevshd+ishdlen ;then comes init values ;first is init re-direction idvilen equ 5*2 idvstr equ idvini+idvilen ; then init strings idvslen equ 16*16 ; (total max length) idelay equ idvstr+idvslen ; Device delay variables idellen equ 2 iexd equ idelay+idellen ; End (or next entry) ; ; ;; -30- excbiose.lib .z80 title boot (excboot) 1st sector rom bootstrap ; 1983-03-21 issue bios boot err msg on read errors ; 1983-03-20 set for 1st release ; 1983-02-21 boot hdr, enable key table ; 1983-02-17 clear screen before font load, len err msg ;**************************************** ;* * ;* EXECUTIVE BIOS * ;* for * ;* CP/M 3.XX * ;* by * ;* * ;* Glenn S. Tenney * ;* COMPRO * ;* P.O. Box 5260 * ;* San Mateo, CA 94402 * ;* * ;* Copyright (c) 1983 * ;* Osborne Computer Corporation * ;* * ;**************************************** ; By: Glenn S. Tenney 1982-12-27 ; this code is limited to 1 physical sector ; (or 1k) and must read in the ccpldr from the ; remainder of the 1st track ; system track layout ; track 0 this program sector 1 (max of 1k) ; cpmldr sector 2-5 (max of 4k) ; track 1 sector 1-4 ccp.com (actually only 3+k) ; sector 5 bios overrides ; track 2  sectors 1-4 are character generation tables ; sector 5 rom's ram overrides ; this bootstrap is read in by the rom into bank 0 ; location 4000h and then reads the ccpldr into 4400h ; include EXCBIOSE.LIB .xlist include EXCBIOSE.LIB .list aseg ; the following is the layout of the rom's ram ; override sector (track 2 sector 5) table equ 0f000h ; place in common to load a table ; 1st is rom's version number (not used) ikbdtbl equ table+2 ; keyboard masks and decode tables ; function keys ikbdlen equ 11+320+512 ; length of all of that ihz equ ikbdtbl+ikbdlen ; frequency (50 or 60) icur equ ihz+1 ; escape sequence char for cursor type ibg equ icur+1 ; esc seq char for background type iclick equ ibg+1 ; esc seq char for kbd click cpmldr equ 4400h ; place cpmldr is linked to execute org 4000h ; must be here !!! ; the following is the header that MUST appear ; at the beginning of the 1st sector of the system ; disk. This header is used by the rom to verify ; that this is a valid system diskette and may be ; used in the future by this and other bios'es to ; determine diskette formats. nop ; x'00' = system bootable disk jp start ; followed by jmp to real code db 2 ; product code (must match rom) db 0 ; feature code ; the next byte is a length byte. ; this tells how many table bytes follow. ; it is here for future expansion, since it is ; expected that the media type byte and the dpb for ; this diskette will be here. That will allow diskettes ; to be other than O1 format double density. ; It is zero now so that when the format is resolved ; future bios'es can tell the difference. db 0 ; number of table bytes following start: ld sp,0fd00h ; stack up in common in a,(sys) ; current bank or 80h ; turn on rom out (sys),a ; reads in cpmldr from system track 0 ld hl,raminit ; init parms in ram from here ld a,04 ; read 4 sectors (2-5) call read ; read disk or a ; any errors? jp nz,booterr ; yes--issue a msg and hang ; reads in 4k of character sets from track 2 ld hl,chrinit ; init parms to read in char sets ld a,4 ; read both character sets call read ; read disk jp nz,booterr ; yes--issue a msg and hang ; font ram will be loaded a little later ; read in table of rom's ram to init ld hl,tblinit ; disk parm table ld a,1 ; read 1 sector call read jp nz,booterr ; yes--issue a msg and hang ; table is as follows ; rom version (2) unused ; kbd decode (11+320) ; fcn keys (512) ; hertz (1) ; crt esc chars (3) curtype,bg,click di ; just in case kbd is touched ld bc,11+320+512 ; copy keyboard masks, decode and function keys ld de,kbdtbl ; where it is to be in rom's ram ld hl,ikbdtbl ; from disk ldir ; move it in ld b,08h ; bit on if 50hz ld a,(ihz) ; get hertz value ld (hertz),a ; set into rom's ram cp 60 ; see how to init the port jr nz,not50 ; 50hz means b is right ld b,0 ; 60hz, so no bit gets set not50: in a,(sysb) ; get crnt status and 255-08h ; clear 50/60 bit or b ; and set to desired rate out (sysb),a ; so it is all set ei ; now ready to alter the screen etc. ld c,1ah ; ctl-z = clear screen call 100h+cout ; 1st clear the screen ; then copy font data to font memory ld hl,chrfont ; from what we just read ld de,0 ; into font memory ld bc,4*1024 ; both fonts ldir ; just move it in ; (rom is already enabled) ; send escape sequences to set cursor type, bg type and click ld c,1bh ; escape call cout+100h ld c,'.' ; period call cout+100h ld a,(icur) ; and initial cursor type ld c,a call cout+100h ld c,1bh call cout+100h ld c,'x' call cout+100h ld a,(ibg) ; initial background ld c,a call cout+100h ld c,1bh call cout+100h ld a,(iclick) ; and initial keyboard click ld c,a call cout+100h ld c,1bh call cout+100h ld c,'e' ; enable kbd table decode call cout+100h ; all done, turn rom off in a,(sys) ; current bank and 07fh ; turn off rom out (sys),a ; all ready for cpmldr jp cpmldr ; off to it now page ; subroutines etc.... ; read ; hl=ptr to parms in our ram area here ; a=number of sectors to read ; setup disk parms and read disk read: ld de,dmabank ; to common ram area ld bc,ramilen ; this many bytes ldir ; copy ld b,a ; copy number of sectors to read jp rsec+100h ; let rom read now! ; booterr ; when we detect any disk error we come ; here to issue a message and then just hang booterr: ; issue an error message ld hl,errmsg ; pt to start of message errlp: ld c,(hl) ; get next character of msg ld a,c ; see if this is the end of the msg or a ; if so, forcibly loop forever jr z,errlp ; end ----> loop forever inc hl ; advance to next character push hl call cout+100h ; send that character pop hl jr errlp ; keep sending the msg page ; equates and constants ; the error message we issue in case of any disk read error ; (a 00h byte ends the msg) errmsg: db 0dh,0ah,07 db 'BIOS boot error reading disk. ' db 'System reset required.' db 0dh,0ah,00 raminit: ; table to init ram parms for disk read db 00h ; bank dw cpmldr ; dma address db 2 ; start at sector 2 dw 0 ; of track 0 db 0 ; from drive 0 ramilen equ $-raminit ; length to init chrfont equ cpmldr+4096 ; after cpmldr comes fonts chrinit: ; table for reading character sets db 80h ; rom bank dw chrfont ; where character sets are db 1 ; start sector 1 dw 2 ; track 2 db 0 ; from drive 0 tblinit: ; to init rom's other ram areas from disk db 80h ; any bank (really in common) dw table ; up in hi memory db 5 ; sector 5 dw 2 ; track 2 db 0 ; drive 0 ; at the very end of this boot sector will be the ; serialization info. Therefore, show it takes up some ; space in case the boot is too large. bootlen equ $-start ; length of this program if bootlen and 0fc00h ; if > 1k (1 sector) .' error, boot is too large ' endif end ah,00 raminit: ; table to init ram parms for disk read db 00h ; bank dw cpmldr ; dma address db 2 ; start at sector 2 dw 0 ; of track 0 db 0 ; from drive 0 ramilen equ $-raminit ; length to init chrfont equ cpmldr+4096 ; after cpmldr comes fonts chrinit: ; table for reading character sets db 80h ; rom bank dw chrfont ; where character sets are db 1 ; start sector 1 dw 2 ; track 2 db 0 ; from drive 0 tblinit: ; to init rom's other ram areas from disk db 80h ; any bank (really in common) dw table ; up in hi memory db 5 ; sector 5 dw 2 ; track 2 db 0 ; drive 0 ; at the very end of this boot sector will be the ; serialization info. Therefore, show it takes up some ; space in case the boot is too large. bootlen equ $-start ; length of this program if bootlen and 0fc00h ; if > 1k (1 sector) .' error, boot is too lar title 'System Control Block Definition for CP/M3 BIOS' public @civec, @covec, @aivec, @aovec, @lovec, @bnkbf public @crdma, @crdsk, @vinfo, @resel, @fx, @usrcd public @mltio, @ermde, @erdsk, @media, @bflgs public @date, @hour, @min, @sec, ?erjmp, @mxtpa scb$base equ 0FE00H ; Base of the SCB @CIVEC equ scb$base+22h ; Console Input Redirection ; Vector (word, r/w) @COVEC equ scb$base+24h ; Console Output Redirection ; Vector (word, r/w) @AIVEC equ scb$base+26h ; Auxiliary Input Redirection ; Vector (word, r/w) @AOVEC equ scb$base+28h ; Auxiliary Output Redirection ; Vector (word, r/w) @LOVEC equ scb$base+2Ah ; List Output Redirection ; Vector (word, r/w) @BNKBF equ scb$base+35h ; Address of 128 Byte Buffer ; for Banked BIOS (word, r/o) @CRDMA equ scb$base+3Ch ; Current DMA Address ; (word, r/o) @CRDSK equ scb$base+3Eh ; Current Disk (byte, r/o) @VINFO equ scb$base+3Fh ; BDOS Variable "INFO" ; (word, r/o) @RESEL equ scb$base+41h ; FCB Flag (byte, r/o) @FX equ scb$base+43h ; BDOS Function for Error ; Messages (byte, r/o) @USRCD equ scb$base+44h ; Current User Code (byte, r/o) @MLTIO equ scb$base+4Ah ; Current Multi-Sector Count ; (byte,r/w) @ERMDE equ scb$base+4Bh ; BDOS Error Mode (byte, r/o) @ERDSK equ scb$base+51h ; BDOS Error Disk (byte,r/o) @MEDIA equ scb$base+54h ; Set by BIOS to indicate ; open door (byte,r/w) @BFLGS equ scb$base+57h ; BDOS Message Size Flag (byte,r/o) @DATE equ scb$base+58h ; Date in Days Since 1 Jan 78 ; (word, r/w) @HOUR equ scb$base+5Ah ; Hour in BCD (byte, r/w) @MIN equ scb$base+5Bh ; Minute in BCD (byte, r/w) @SEC equ scb$base+5Ch ; Second in BCD (byte, r/w) ?ERJMP equ scb$base+5Fh ; BDOS Error Message Jump ; (word, r/w) @MXTPA equ scb$base+62h ; Top of User TPA ; (address at 6,7)(word, r/o) end ion for Error ; Messages (byte, r/o) @USRCD equ scb$base+44h ; Current User Code (byte, r/o) @MLTIO equ scb$base+4Ah ; Current Multi-Sector Count ; (byte,r/w) @ERMDE equ scb$base+4Bh ; BDOS Error Mode (byte, r/o) @ERDSK equ scb$base+51h ; BDOS Error Disk (byte,r/o) @MEDIA equ scb$base+54h ; Set by BIOS to indicate ; open door (byte,r/w) @BFLGS equ scb$base+57h ; BDOS Message Size Flag (byte,r/o) @DATE equ scb$base+58h ; Date in Days Since 1 Jan 78 ; (word, r/w) @HOUR equ scb$base+5Ah ; Hour in BCD (byte, LOADER y; !91""|0!~ʞz=_: _* ""*og*%|}D S#N#F:ʒ#4ʝ^#V{‚:¿*.~w*DM!&_*.& >k s#rr+6.""1*D`.45. F.~. ^#Vx>`. s#rz 6#N#fi%$g1:=<@v_}v=p{_3;{<g"T=X3*j ~P#~R#~L{gbk#N#Fk$&Zcx {~#o}o1!;!"Ï:= w*wWx ~#&*.~s*"ѷ\ Cannot load Program 221282 COPYR '82 DRI <bHA$@DH   A@!" $$@1-! j 1".~2.~2 :Xck*kͮ  b < .~=>$.w.6#w.6#w.61.~  .~~w@.p T~º>+~.~~! yͮ Ë.~~w2g !PROFILE.S !+2 !  +~d {   O! w+w+: =w! 5 c ʋ  :p  m>> ͧ  N Ĩ –.~+w.~2  9 : ! ~##~ !7 : !Կ : x*l " !ZXچ! 6  zz: 6 : %2p  ͆ : =̀ 2r  DIR TYPE ERASE RENAME DIRSYS USER u"Q}:\=p:r Aæ R ÂN ͙ʸ} !M 545 x ]  ̵ 6 : oG! ~怹>2M  xf>:ͦ ͤ ͍ ͤ f ¹2 lf   ͫR  L͞L I *  *  A }_Yl !ͮ ͒6 \&đ %* "l ͍  ûȷ45: w ? A I N   SUBMIT COM ! ͮ ! 6 #"l  !cͿ  O!:r :ͦ ͍ !~B I !pͰ ^#VCOM SUB PRL y!cͰ  î !" * %.2P#ͮ !g 4*l +"l ͷ 2 "Qx2Sl "Tx2V!q ~ :p ͆ .ڶ2* og$2| .w#w#w#w.~ .w#w~?w; ; ! ~#49 w#~$ A  < > _I  ! 6 ! ~#Ͱ 6 m   _  ! 6=  { *.pѯ:r x , \<=!Ͱ =ɯ2 \s 2 ! D ;! : .44 #4"l ~[* 2 a7 {7 w!Y #! *l "l " ~ U #D ]T!̷ 6*%.w#w!} 6 r 6 #w.6#6 #t#6.wo*.s#r.rͧ ̧ m . ^#V45+ w#w.f.5\A "l " l |F# !( | !( : x. +"l ! ͮ   ͮ ~!G8 * ~;#1 կA *l ~:g X #I ѯ*l  *l ~0څ :҅ q X x<Ü AX QX X ~@#~:k #^ *jT~# ® wy#ù ! 4 : !Ͱ ~@*h~ yw y/w*hw*h~I E> ͦ > æ % 0  < : ~ȹͦ #* A !g ~6*  * >? A *l " ~0: :: q "l x~0 xG#Gs : &͘ ͤ &ͦ %˜ >  Ʌo$>?· !  > # ͮ x> # ~ Enter User #: $No File$ required$ERASE $ (Y/N)? $ Press RETURN to Continue $ (User 0)$NON-SYSTEM FILE(S) EXIST$: $$$ SUB_  ! 6=  { *.pѯ:r x , \<=!Ͱ =ɯ2 \s 2 ! D ;! : .44 #4"l ~[* 2 a7 {7 w!Y #! *l "l " ~ U #D ]T!̷ 6*%.w#w!} 6 r 6 #w.6#6 #t#6.wo*.s#r.rͧ ̧ m . ^#V45+ w#w.f.5\A "l " l |F# !( | !( : x. +"l ! ͮ   ͮ ~!G8 * ~;#1 կA *l ~:g X #I ѯ*l  *l ~0څ :҅ q X x<Ü AX QX X ~@#~:k #^ *jT~# ® wy#ù ! 4 : !Ͱ ~@*h~ yw y/w*hw*h~I E> ͦ > æ % 0  < : ~ȹͦ #* A !g ~6*  * >? A *l " ~0: :: q "l x~0 xG#Gs : &͘ ͤ &ͦ %˜ >  Ʌo$>?· !  > # ͮ x> # ~ Enter User #:1EN ͍E %E͍ED͍EDʢDC͏D͕D!CE~# 4D͕D C͍E:Eg:EsD:E_Dg:EsD!]C~$oD#~B̩D1EɷW|g ͏D͕D%zD͍ED͍ED ͍EvCPM3 SYS CPMLDR error: failed to open CPM3.SYS $ CPMLDR error: failed to read CPM3.SYS $ CP/M V3.0 Loader Copyright (C) 1982, Digital Research $021182"LyڥE2L2L:L2L{2L!" G"L9"@F1F!NLy2EK!EEdڛJ_^#V*LFFFFFFFFFFFFFLLLFFFF;LFFFFALGLFFFFFFFFFFFFFFFFFFFFFFF:FžF Ny!L4 5~yµF5 6y ’F ͒F:LF!L OͻFFMDF2 G>F BDOS ERR: $Select$Perm.$FFF GFFGFv{_zW{_zW )8G# ?G w#JGJN|^#V###"L##"L######"L!L IG*L!LIG*L|!L6ʕG67N*Lw#w*Lw#w#w!L^#V#FͪG'NOGG*L&I!Ls#r#p*LN#F*L^#V#F*L:LO}|yH*L%G+G*L.G}|yH#H*L%G*LDM"LN*Ls#r*Ls#r#pyoxgkHDM*L0NMD"L!N*LMD$N:LO&I!LN:L yHG>O:L ʐHÇH*L͒H :LʨHn` ~#forH2LO͚H"L}:LO*L7G"L2L"L:LO:LG2L!Lw*L *LH!H~2L~2LH:L2LH:Lw:Lw |g}o'I )4I:LO!3Iyoxg:LO&I}*L:Lo$H~w{ozg ^#VG:LʏI>LÛI͡I"LGͳG*LçI*LrI"L!L~#O&IE:LIHN/*L"Ly2LʹI͗GͻIͫIʛJ*LXI:LO~JJyʔJx ʍJ ʂJJJÍJNIJJ# hJ2 GG>GF:JH~XI*L IGIOw!JxJ>Fwx2L2L~:L:L6:LJw2LH~O I!K>w:JͨJH2LF4IO.K5FJͿJKH:L!LSKFJ: GFͮHFH:LL͛IGͳGI:L< G=!LwW*LMI_SG G-*LMD:I"L:L2Lɯ2LK>G=O*L~~w#~2L~wcIH~K~p2L!"L>2L*L~=2LK~2L͛KoK>*Lw!"L2L=2L!"LÛI͛KoK͢K͢J'LͫIH~<7Lw@ͩK7K:LF"LÛI:L~L:L2L:L~L*L6:LpLw#:LwH:Lw*@F* G}D>LI$*LL*LTM:L_2L{2L"LrI"L[MM?G,MdM>lM[MIG6:L<!=6M*LJM"L*LKN:LG/O*LL*LG=GdM##LIGOPOPsPxPlPlPlPxPO)POOO/P4PqPOqPsPqPdNkPhNOONOOæOOÝOéOcNcN!}P!lNɕNNQQQQNQQQQN (? Q-?QR ? /Q$?8Q?:O s12O*O| :OTOÏO"V͉OÏO*D:O2O{!Oq#p#ts1W2OzO:O{CHP2GPCKPy<2JPɯy2BP2APi`{_ng{s12(P>'P:(P{!RQP!vQP O*lNPq#p#Pq#pɿ éOéOéOCRT tRtVOsborne Executive CP/M Plus BIOS V1.1 Copyright gG 1983 Osborne Computer Corporation 1           y2=Pi&lN) ~#fo">P+~2MP+~+ng{*>P~#foQ|:MP2P`(iP !2NP2CP!N:Q#~ (<(#w#w s#r~#+2@P! ~#fo+++~2CP+~2NPZQ]:APR:JP2DP*HP"EP!AP4#5R:@PR#:JP!R6!GPJ:DP2M*EP"K:APG&'Pѷ(` :CP !NP:Q iP !AP6=QQQQNQQQQN (? Q-?QR ? /Q$?8Q?:O s12O*O| :OTOÏO"V͉OÏO*D:O2O{!Oq#p#ts1W2OzO:O{CHP2GPCKPy<2JPɯy2BP2APi`{_SPhhP8ͱ HFlh8` nx*l6ǀ3ll8 ~ `4fPp$#`?ٶ4u`Lͮ`eU8kFo&ePJܮwXڮVmfP DJ¯@ pic@Y FՀ3lh #~K6ƀHP&Y)AD24D) #: Id ynјY)AB@h(P&!r7Bi6L@r2L@3%0h(H @P( @P( @P( !Xf. rfi3A R G!`i3N`e9L'#  Cd l [ -"ڴ#+[p[@ ^Ȋ l9O/J7ps[F՛/xFV][^+vz@W ]+z@t"^+zEW Tz@W ^+z@W ^+z@W ^)jcv;cv;cv;cv;cv;cv;cv;cv;cv;cv8-Vx ͡LȆ?쁣@¶CVK'%dm]0p@" _2lR{6݁0Xw< M"0xʄGAD"!< "Ce6LgA!@r6а0 f a0 f f'/v{BH»@Y{La0`5;l:JfѰՐ^b1b+$#b1En6`  fԐ1Uum(@8"ͩ bT|Ёnʲc`ݒͣJU;$wgvHea͵@lNd6Xt\ Ux&m&bsgHdf(eaUpW }IGÕAV!I@.1[|V!K'ԙ4yL6#Fr8#* Jj\U +ͣMU9Lg!yI ;6 pfiEt(Ub F$ [@{m8A8upBk g>:N ,:h : Rxf0V jo<- 'i0)d`@!M#%y`ݒ{JI;%%Ydn0ڄ-V<|fހfQfݠ6m]YmrXHk!W!*UC6(9``* º`+`1YbGV ^G< E`Y jV_0H05O#+v: s خSx:q$Of`R(Ԅ.- ͼ{>X0Y""f@VmjYVlUyBlڰ :0rP1nʲLJ5cAU %Ja`ͼ` `@k+T$ dp#t f`C՛V]b3jH6'p0!!*WH|#+x[݀:a v@?쁲[*@`^2K6meRq}Bwٴj^2! ;4f@RzKƬ;ͽ~ â:!~mU0wz@uB@+͵͸ja] mfݠ6ma`Q2XCp̃\Ub4f07 JYM"3i(2GV ew*a q='@DuO#?(W ;k+6 ~PV BP@2!~sǣ+t9erl[U;D +Wx z2AEwvlfuhٶI,V f`CMa 2YMWx!y@b+ó`@ @-U Uw[AF: c6B*OU > 0"[-Ke%ـlDp"[<-Ki%pm@D"[T-Kl%A@mD"[n-Kn%ЉmD"[-?帡`n@D$"[-Ks% {tX$@UaUzjH+{P@3k(3jK4K6`JYG&ml fհmIW, x@(dz¦.U _6J XKUw(A^Od`@F*K՛v#ץf@#sFI'U %Ja`ͼ` `@k+T$ dp#t f`C՛V]b3jH6'p0!!*WH|#+x[݀:a v@5078 AUXIN 5073 AUXIST 5071 AUXOST 506C AUXOUT 504F CBOOT 5078 CONIN 5073 CONIST 5071 CONOST 506C CONOUT 506B DEVINI 507D DEVTBL 4E6C DRVTBL 4FEB FLUSH 4FDD HOME 506C LIST 5071 LISTST 4F4E MOVE 4FED MULTIO 502F READ 5107 RVERS 4FF6 SECTRN 5029 SELDSK 4FA6 SELMEM 4FD9 SETBNK 4FD3 SETDMA 4FE5 SETSEC 4FE0 SETTRK 50A4 SIGNON 4FCE TIME 4FA9 TOROM 5103 VERS 504F WBOOT 4E03 WBOOT@ 5034 WRITE 4F9D XMOVE 4ED0 DPBTBL 4E95 DPH0 4EB7 DPH1 517F STDINI 51EB STDRD 5180 STDSEL 51F0 STDWT 4FD1 DBANK 5047 DMABK 4FD2 KLUDGE 4F89 ROMMV 4FD0 SBANK 5041 ACTCNT 503D DRIVE 5069 STDERR 5069 STDSEN 5274 AREA0 5069 STDNR EXCBIOS0MAC EXCBIOS1MAC EXCBIOS2MAC $fEXCBIOS3MAC >EXCBIOS4MAC C:EXCBIOS5MAC RdEXCBIOS6MAC kEXCBIOSELIB oEXCBOOT MAC tEXCWTSYSMAC |*SCB ASM CCP COM ????<<<?<<<<<<<<<<<<<<<<<~~~~<<<<<<< :Va/>z!V/H҄ :V_2V:V!Vq:V/>!V/HҦ >ͧ>!Vp+q(7*V~ Y7 N7NTe:T *TMV Y*Vw!Vq:VO! N7:VO! N7!Vp+q 7*V|O *V}O H7!Vq*V&+SDM$ !Vp+q!V6!V60!'"V>V͇S† *VM7 !V6>!V VVzSڽ !V6:V<2VVVzS+s#rÔ :V *VM7!V60*V! S"V:V<2V‹ !Vs+q(7:V  #7*V&DMZ  *VM N!Vs+p+q+p+q :T: ͜*V6:V<2VO!T NV 2V  :V,u *V#"V*V6!V6 :V#… !V6  :V02V:V> !VHҽ >!VҸ :V2Vý !V6!V:V *V^*V&+S*V& *Vq !V6*V6ͧ *V6? ͜*VDMN*V~  (7*VN !V6>!Vn *V#"V:V:-Q/HX *V6d ,7*VN :V<2V, *V++"VNÊ *VN*V !V6!V6Te!Vr+s+q:-Q/Ү >!V6#q#p!V6:5Q!Vڳ*V&+SFQ  VzSک:VM*V&+SFQ  ~*V&+SFQ  VzSHJ:V2V*V&+SFQ  ^#V"Vé*V&+SFQ  ~*V&+SFQ  VzSHҩ:V2V*V&+SFQ  ^#V"V:V<2V¿ :V:VH`!V6:5Q!V`*V&+SFQ  VzS/*V&+SFQ  ~H*V&+SFQ  VzSHV:V2V*V&+SFQ  ^#V"V:V<2V:V!$V6!U6ͬ#Q$!H> U͇Sʔ* U|2Uß*U|2U!U:.Q2T*U|!UO:/Q2T*U|O:T2TUTI:-Q/!$V>O:T2T* U|O:T!$V2T:T=2T* U|O:T2TҮ:-Qқ*nV*U*V |!UO:/Q2T*U|O:T2T2Uͬ:U/Ҙ!!V6>!!Vژ*!V&$SQ  6:!V<2!Vsà!U6:V/ҫ*:U2T:T2TTͩ:-Q*T&+SDM*U*T&+SDM*U:-Q/&:U2!V!""V*!VM"V͟:!V2U! U6Û*U|!U2!V* U|!Uo&)##""V*T&+SDM*!V*!VM"V͟:!V2 U:U2!V!""V>T͇S+s#r*!VM"V͟:!V2U* U|!$V2T:T2T U(T(TͩC*$V&+ST͊S+s#r* U|!$V2!V:-Q/ *T&+SDM*!V"*T&+SDM*!V*!VM"V͟:!V!Uw:-QҢ!T6:T2TULTLTͩ*U|2!V*U|!Uo&)*"V""V*T&+SDM*!V*!VM"V͟:!V! Uw:,Q/Ҳ:V2V *V&U  :T2T*T&! S!0*V& U q*T&! S0*V&!U q:V 2V*T&+S"!U$-U RUW !T6#6#6:.Q2U:/Q2UTqT TyT Uͧ pT !T6Uͧ pT pT :;Rһ!;R6:%V2.Q:4Q/24QTT TT L!U6N!Vr+s+p+q*V6 *V#6 *V|O! *V## w*V|O! *V w*V}O! *V w*V}O! *V w!T:TO`iPSW "V*V :0Qw*V :2Qw*V :1Qw.*V :3Qw*V :4QwX*V   :+Q/ҼW*V >*V w:@*V wW*V >*V w^*V :/Qw!)X"V*VN#F!W "V*V"V*V͕S(!$V6-!$V6*VSD*VWR!"&V!V6&VS!V6>!Vڷ*V&)*&V>͒Sʭ*V&)*&VWR"(V*(V ͕Sʭ!V6:V<2Vf:-Q/!V!$V6!$V6V>X W*V"V*V~>>!Vs+p+q+p+q%N*VDMN 7*VDM$  7*VME :,QҨ *V&U *VDM :V 2V*V&U DM*V:V2V*V&U *V&+S:V2V*V&U ) :V2V!Vp+q*V"TͣN,ͧ*VDM !Vr+s+p+q*V^#V"T*V##^#V"T*V ^#V"T*V#DMT  *VDMT *TZSU͊S@?ͧ*T+ZS}<2V!V6!V:V҆*V&+SW "TDMͧ *VDM> :V<2VS*TDMO W*T"T!Vr+s+q:VGTqT TyT *Vn}2T*V#~2TpT WTS}pS}TR+s#r*V&)+!Vs+6:V!V4>T͇S+s#rBKͧ pT^ :V<2VpT *VT :-Q/k)Tw T z!LT"V!U"V͙!T"V!U"V͙!(T"V! U"V͙*V#DMT  *VDMT *VDMeͧWͧ *VDM> *V*Ws#r*V##*Ws#r*V *Ws#r*VDM> !V6&VS(>!V6>!V*V&)*&V>͒S*V&)*&VWR"(V *(V## *(V ͕S*(V ͕SH*(V ͕SH*(V ͕SH*(V ͕SH!V6:V<2V-:V!V6!V6!V6>!V*V&)*&VWR"(V*V&)*&V>͒S*(V S?!V6*(V ͕S:V/c!V6N:VO!=R ~2T *(V WR"*V**V N#F`i))"VN:VAO7N*V&6Q DMʹ ͜*V&6Q ~/*(V q#p:-Q/!V6*V&,V) *Vs#r*V*LV"LV*V͛ 2V'ͧ*V&+SFQ  *(V w*V&+SFQ N`iPS*V&+SFQ  N`iPS*V&+SFQ  ͕S *(V q#p*V&+SFQ  VzS*V&+SFQ  q#p:V<2V:-Q/!V!$V6:T<<2T:T<<2T!V6>!V8*V&NV) >w#6*V&pV) >w#6:V<2V:!Vڡ*V&)*&V>͒Sʗ*V&)*&VWR"(V *(V WR"*V*(V ͕SN:VAO7:7!V6**V ^#V!S*V&+S*V&NV) q#p*V&NV) nVR+s#r*(V ͕S—'N:VAO7:7!V6**V >R!S*V&pV) s#r*V&) VR+s#r **V R*V&pV) CS **V q#p:V<2Vk:Vҫ͜:T2FQ!T:/Q2GQ!"IQ!HQ6!V6ON:GR2T 5Q N*FQM ,7*GQM ,7*HQM N:V/҈!N!V6:5Q!V !V6:V/ :V =O!=R ~2T*V&+SFQ DM *V&+SFQ  N`iPS*V&+SFQ  q#p*V&+SFQ  ~ͧ *V&+SFQ  ~7ͧ *V&+SFQ ~2V*V&*V&+SFQ  N "V*V|*V}O:/QH҆MN!V:/Q*V&+SFQ  Hq!V:/QO`iPS*V&+SFQ  q#p *V}2V!V6!V6!V:V# *V&+SFQ ~2V*V&+SFQ  :V2V*V&+SFQ  *V&+SFQ  !V:V/+~!V/H+ |ͧ!V6 :V!V+~!VHc N*V&+SFQ :Vw!V6 :V!V+~!VH N!V:V*V&+SFQ  Hq!V:VO`iPS*V&+SFQ  q#p!V6:V<2V×1:V<2V"͜!V6:5Q!Vo!:V!N!N:V=O *V&+SFQ NE *V&+SFQ  NE :-Qb!N*V&+SFQ  N ͜:V<2V !T6!V6%NVʹ ͜PNT2V!TT TT N!V6Vʹ ͜:V!FT !!U6+6!W6͌!:W/җ#:R2T͜N;Rʹ :=R2T͜͜N,Qʹ ͜͜:>R2T:2Q<22Q  2Q :2Q=22Q:?R2T:1Q<21Q' 1Q :1Q=21Q:@R2THN3Qʹ ͜:AR2TkN4Qʹ ͜͜:BR2TN:0QAO7NTe:T"*TMV A2W*WM͈ /"Þ":W20Q͜͜:CR2T.Q *.Q&PS"U:DR2TN-Qʹ ͜:-Q/2T:-Q[#:ER2T/Q ͜:FR2TN+Qʹ ͜x#:R2T͜N!W#*W&U 6:W<2W#!W6>!W $*W&U 6$:W<2W#!V6*V&U  !V6TqT TyT Wͧ pT^ pT^ WS#ZS"U!W6>!Wڋ$*W&,V) >w#6:W<2Wh$!"LV:]A$!U6#6!W6>!W$*W&=R 6:W<2W¦$$!U6#6:mD$!U6!T6 Available space in 256 byte pages: $TPA =$, Bank 0 =$, Other banks =$Unable to allocate Dir deblocking buffer space.$Unable to allocate Data deblocking buffer space.$Unable to allocate Data deblocking buffer space.$Drive specified has not been defined. $0FFFFH is an invalid value in the DPH directory BCB address field.$ Setting up Blocking/Deblocking buffers: $ The physical record size is$: $ *** Directory buffer required *** *** and allocated for drive $: *** $ Overlay Directory buffer for drive $: $ Number of directory buffers for drive $: $Minumum number of buffers is 1. $ Number of directory buffers for drive $: $ *** Maximum number of directory buffers *** *** for the current drive is$. *** *** Number of directory buffers reduced *** *** accordingly. *** $ Share buffer(s) with which drive ($:) ? $ *** Data buffer required and *** *** allocated for drive $: *** $ Overlay Data buffer for drive $: $ Number of data buffers for drive $: $Minumum number of buffers is 1. $ Number of data buffers for drive $: $ Share buffer(s) with which drive ($:) ? $ Allocate buffers outside of Common $ Accept new buffer definitions $!W6>!W**W&)*&V>͒S**W&)*&VWR"(V ͕S*(V ͕SHҸ* *(V WR"*V**V ^6 *W&$SQ q#p*W&$SQ  6*(V ͕S*%ͧ!W4*!W6>!W+!"HW}2W>!W=+*W&$SQ HW|S ~H6+*W&$SQ ^#V"HW!W4**W&))lW *HWs#r*W&))  >w#6!W6>!W+*W&$SQ HW|S>͇SH+*W&))lW  *W6 DS+s#r*W&$SQ  6!W4h+!W4*!W6>!W7,*W&+SFQ  *W&W) N#Fq#p*W&+SFQ  *W&7W w!W4+:-QF,!fW6K,!fW6 !W6:W4:fW=2iW!"gW"dW}2 W! W6*T&PS*LViS"bW:-Qڞ,nVbWzS*ViS"bW!W6>!W,*W&W) *W&+SKQ  N#Fq#p*W&$SQ  6!W4£,!W6! W6#6!W6n&))lW  ^#V"JW*W&))lW >͒S:WH3:WE-1&N!W6]&N*W&))lW N#F$ {&N!W6>JWR>fS:WHҚ-!JWVS+s#r!W4g-!JWVS+s#r:W3*W&)*&VWR"(V WR"*V >RZS"^W **V ͕S-!W6-!W6*(V ͕Sc0bB*W&$SQ  >w:-Q.: Wd.! W6*W&$SQ  6&N:WAO7&N.:W{O!=R ~2T&N:WAO7'N*W&$SQ  DMʹ ͜*W&$SQ  ~.*W&$SQ  6.*W&$SQ  6t/:W;O!=R ~2T'N:WAO7>'*W&$SQ  DM  : Wt/! W6*W&$SQ  ~t/A'ͧb'N:WAO7'*W&$SQ  DM  &/*W&$SQ  ~^W͇Sҹ/'N*^WDM$ 'N*W&$SQ  *^Ws*W&$SQ  ~R0:W[O!=R ~2TM(N*W&$SQ  ~AO7(NTe:TL0*TMV A2 W* WM͈ *0/* WMF80/*W&$SQ  : Ww͜c0*WMTCc0 4*(V ͕Sn3!W6*W&$SQ >͒S°0*(V q#p*W&$SQ  6n3bB*W&$SQ  >w:-Qګ1: W1:W1! W6!W6*W&$SQ  6(N:WAO7(N1: W1!W6! W6:Wʨ1:WƋO!=R ~2T(N:WAO7)N*W&$SQ  DMʹ ͜*W&$SQ  ~ґ1*W&$SQ  6è1*W&$SQ  6! W6S2:WKO!=R ~2T)N:WAO76)*W&$SQ  DM  *W&$SQ  >w: WS2! W6*W&$SQ  ~S29)ͧZ)N:WAO7)*W&$SQ  DM  2*W&$SQ  ~$3: WҌ2! W6*W&$SQ  :Ww 3:WkO!=R ~2T)N*W&$SQ  ~AO7)NTe:T 3*TMV A2 W* WM͈ 2Ü2* WMF2Ü2*W&$SQ  : Ww͜*W&$SQ  :Wwn3:U!W]3:W+O!=R ~2T)N*W&$SQ  DMʹ ͜*WMTCn3 4! W6*W6 dWDS+s#r!W4>JWR>fS:WHҿ3!JWVS+s#r!W4Ì3!JWVS+s#rç-!W4n&))lW  ^#V"JW-!T6!W6:W 4bB)NWʹ ͜P,!"PW}2Wo&"TW2W>!Wu5*W&$SQ  ~n5*W&$SQ  ~ >Hһ4:-Q|4!W4á4*W&$SQ !^N#F-S*TW"TW*W&$SQ  ^*PW"PW*W&$SQ  ~ >Hn5:-Q/5!W4*W&$SQ  ~,5*W&$SQ !^N#F-S*TW"TWT5*W&$SQ !^N#F-S*TW"TW*W&$SQ  ^*PW"PW!W4#4*fW&*PW+S*W&) "RW:-Q9W*U"jW*RW*U*TW *LV *V *nV |O:.QO:T2UO:T2T:T2T:T2T|2U!T2.QW"T*T&PS*U "ZW*RW "VW*T"`W*`WW !T͕SC6*`WW 6*`W#"`W6!W6n&))lW  ^#V"JW*W&))lW >͒S:WH9!W6>JWR>fS:WHҶ6!JWVS+s#r!W4Ã6!JWVS+s#r:W8*W&)*&VWR"(V*W&$SQ  >«7*W&$SQ  ~h7*jW6 *jW *VWs#r*W&$SQ VWR+s#r*(V *ZWs#r:fWZWR+s#r:fWjWR+s#rë7*(V"LW*W&$SQ  n&)*&VWR"(V ^#V"NW*LW"(V *NWs#r*W&$SQ  >£8*W&$SQ  ~48*jW6 *jW *VWs#r*W&$SQ VWR+s#r*(V *ZWs#r:fWZWR+s#r:fWjWR+s#rã8*(V"LW*W&$SQ  >o&)*&VWR"(V!Q  >ʂ8*(V ^#V"NWÐ8*(V ^#V"NW*LW"(V *NWs#r!W4>JWR>fS:WH8!JWVS+s#r!W4ç8!JWVS+s#r6!W4n&))lW  ^#V"JW\6!W6>!Wc9*W&,V) >͒S\9*W&)*&VWR"(V *VWs#r*W&,V) VWR+s#r!W4 9!W6>!W9*W&)*&VWR"(V*W&NV) >͒Sʽ9*(V *VWs#r*W&NV) VWR+s#r*W&pV) >͒S9*(V *VWs#r*W&pV) VWR+s#r!W4h9aB!W6>!W::*W&W) *W&+SFQ  N#Fq#p!W4:*V*RW*nV "RW> U͇SUzSH҇:*TW*U|O:.QO:T2Uá:*TW* U|O:.QO:T2U!U:T2T:T2T:T2T:.Q2.Q* U}pS} URU͊S"`W> U͇SUzSHB;*RW|O:/Q2T*U}pS}URW"\W*T&PS"XW*T&PS*U "VWÇ;*RW*`W|O:/Q2TW*U"\WO`iPS*`W "XW*T&PS* U "VW*RW*\W"T*U|O:T2T*W&)*\W"jW*XW"ZWWTS"U*T"`W*`WW !T͕S;*`WW 6*`W#"`W;!W6!W6!W6:5Q!WS<*W&+SFQ  2W!FQ  ~:W!WHL<:W2W:W2W!W4;:T2FQ!T:/Q2GQ:W<*W&+SFQ  O:T<*W&+SFQ  N`iPS!͕S"`W!FQ :T w*W&+SFQ  N`iPS*`WiS!q#p!W6n&))lW  ^#V"JW*W&))lW >͒S:WHғA!W6>JWR>fS:WHh=!JWVS+s#r!W45=!JWVS+s#r:WxA*W&)*&VWR"(V*W&$SQ  >0?*W&$SQ  ~>*(V"LW*W&$SQ  n&)*&VWR"(V ^#V"NW*LW"(V *NWs#r0?*\W*ZWs#r*(V *XWs#r*XW##"XW*\W##"\W!W6*W&$SQ  ~!W ?*W&$SQ ^#V͛ 2W*jW6*W&+SFQ N`iPS!N`iPS!͕S  *jW q#p *jW 6*W&+SFQ  *W&$SQ |S+s#r:fWZWR+s#r *jW s#r:fWjWR+s#r!W46>:fWjW͇S+s#r! >w#6:fWjWR+s#r*W&$SQ  >1A*W&$SQ  ~¤?*(V"LW*W&$SQ  n&)*&VWR"(V ^#V"NW*LW"(V *NWs#r1A*\W*ZWs#r*(V *XWs#r*XW##"XW*\W##"\W!W6*W&$SQ  ~!W A*W&$SQ  ~ҩ@*W&$SQ ^#V͛ 2W*jW6*W&+SFQ N`iPS!N`iPS!͕S  *jW q#p*W&+SFQ   *jW w*W&+SFQ  *W&$SQ |S+s#r@*jW6 *jW *VWs#r*W&$SQ VWR+s#r *jW 6:fWZWR+s#r *jW s#r:fWjWR+s#r!W4?:fWjW͇S+s#r! >w#6:fWjWR+s#r!W4>JWR>fS:WHhA!JWVS+s#r!W45A!JWVS+s#ru=!W4n&))lW  ^#V"JW=!W6>!WA*W&7W *W&+SFQ  w!W4˜A!W6>!WaB*W&)*&VWR"(V*W&NV) >͒S"B*(V *ZWs#r*W&NV) ZWR+s#r*W&pV) >͒SZB*(V *ZWs#r*W&pV) ZWR+s#r!W4A!"W"W!W6:5Q!WB*W&+SFQ  ~¶B*W&+SFQ  VS*W"WB*W&+SFQ  VS*W"W!W4pB$N%N!bWVSDM$ :-QMC%N*WDM$ :U C$%N*WDM$ >W͇S>W͇SHHC!W6MC!W6͜͜!Ws+q*W&$SQ ^#V"W:-QڋC:fWWRbW͊S+s#rF!iW55:W®D*W&$SQ  ~2W!W6:W!WګD!fW:iWYD!iW6*gW#"gW!W6!W6!W6:5Q!W7D*W&+SFQ  2W!FQ  ~:W!WH0D:W2W:W2W!W4C*W&+SFQ  S+s#rcD!fW:iW2iW*W͛ 2W…D4%ͧ>äD*W&+SFQ  WzS+s#r!W4±CF*W&$SQ  ~2W!W6:W!WF!fW:iWoE!iW6*gW#"gW!W6!W6!W6:5Q!WME*W&+SFQ  2W!FQ  ~:W!WHFE:W2W:W2W!W4D*W&+SFQ  S+s#ryE!fW:iW2iW*W&$SQ  ~ڼEWbWzS+s#rYS:/QpSҹEd%ͧ>E*W͛ 2WE%ͧ>E*W&+SFQ  WzS+s#r!W4D>!Wq*W6 dWR>fS'F>%ͧ>ERROR: $ at line $Missing parameter variable$Equals (=) delimiter missing$Invalid drive ignored$Invalid character$Invalid parameter variable$!"WWͧ !W6!W6:W GG:WG͈K2W:WFIGF GF!Wr+s+q:U2W!U65FN*WDMN>FN*WDMZ :WCG.͜:W2U:WoG!W6TlG!W6sG!W4MG*W&W ~2W:W :W H:W HG:W ·G*W#"WMG*W&W ~2WÄG:Wa/>z!W/HG:W_2W:WG!W6:W!W6:W/:W/HI!W6>!W/H*W&W 6 !W4HtG2W!W6:W:W=H:W H:W/H~H*W&W :WwtG2W!W4:H:W=:W H:W/HҧHtG2W~H:W I:W=>!WHH!W6 I:W=HHF GH:WHcF G:W :W/H ItG2WHGtG2W!W6!T:W:W H:W/H[I*W&T :Ww!W4~`i+wtG2WI:W :W/HxItG2W[I!W6#6>!W҇K *W&+S P  ^#V"W! P  ~2WJ:WI:WA2WI:W0/>9!W/HI:W02WI:WA 2W *W&+S P  ^*W&+S*W"W*W&T ~?[J *W&+S P  :WO!=R 6!U6!W4!T5>!T҇K:WʧJ*W&T ~A/>P/HҜJ*W&T ~A*WwäJF GÇK:WJ*W&T ~Y*WwÇK!W6*W6!W6:T=!WڇK:W!WO!T ~2W, K*W#"W6!W6ÀK:W#K!W6 ÀK:W02W:W> !WHQK>!WLK:W2WQK!W6!W:WxK*W^*W&+S*W& sÀKF G!W4J!W6!W6:W:W/HK!W6:W *W&+S P *W& *W&W HK!W4éK:WK!W6K!W4ÒK:WL>:WWͧ T. T~ !W6!W6>!WN!W6#n& +S P  ~2W!W6:W:W/H N!W6>!WڞL'N *W&+S P *W& *W&W w!W4gL:W°L!W6L:WL:WA*W&W wL:W L:W0*W&W wL:WA *W&W w'N*W&W 6 'N*W&W 6='N*W&W 6  *W&+S P  !^*W&+SR"W:WmM'N*W~A*W&W wM:WʞM'N*W~ҐM*W&W 6YÛM*W&W 6NM*WNbN:WM'N*W&W 6,*W#"W*WNbN'N*W&W 6,*W#"W*WNbN'N*W&W 6 'N*W&W 6 !W4PL!W4'L>!W NT^ T :W]NT^ !W6>!WUN*W&W 6!W4:N!W6aN!W4!Wq'N:WO! *W&W w'N:WO! *W&W wO*TDM}oN*T†O]!O> 2 PW:TgxʀO { O: PO*T!O†O~#o}o|O<O:TzO<.O:TƜzO<8O:TzO:TzO:TotOzO:TgN!|!|PRTMSG ,QPAGWID 2QPAGLEN 1QBACKSPC 3QRUBOUT 4QBOOTDRV 0QMEMTOP .QBNKSWT -QCOMBAS /QLERROR  +QNUMSEGS  5QMEMSEG00 KQHASHDRVA6QALTBNKSA +QNDIRRECA ;QNDTARECA KQODIRDRVA [QODTADRVA kQOVLYDIRA {QOVLYDTAA QCRDATAF ;RDBLALV ))덑o|gS =S^#V))) DM!>)):S =2S_og^#V) PS^#V|g}o ZS_{ozgO{ozgi`N#Fogo&og_{_z#WBNKBIOS3SPRRESBDOS3SPRBNKBDOS3SPRCPM3 SYSGENCPM DAT . $PRTMSG = N PAGWID = 4F PAGLEN = 17 BACKSPC = N RUBOUT = Y BOOTDRV = A MEMTOP = FC BNKSWT = Y COMBAS = F0 LERROR = Y NUMSEGS = 01 MEMSEG00 = 10,A7,00 MEMSEG01 = 0D,93,04 MEMSEG02 = 00,C0,03 MEMSEG03 = 00,C0,04 MEMSEG04 = 00,C0,05 MEMSEG05 = 00,C0,06 MEMSEG06 = 00,C0,07 MEMSEG07 = 00,C0,08 MEMSEG08 = 00,C0,09 MEMSEG09 = 00,C0,0A MEMSEG0A = 00,C0,0B MEMSEG0B = 00,C0,0C MEMSEG0C = 00,C0,0D MEMSEG0D = 00,C0,0E MEMSEG0E = 00,C0,0F MEMSEG0F = 00,C0,10 HASHDRVA = Y HASHDRVB = Y HASHDRVC = Y HASHDRVD = Y HASHDRVE = Y HASHDRVF = Y HASHDRVG = Y HASHDRVH = Y HASHDRVI = Y HASHDRVJ = Y HASHDRVK = Y HASHDRVL = Y HASHDRVM = Y HASHDRVN = Y HASHDRVO = Y HASHDRVP = Y ALTBNKSA = Y ALTBNKSB = Y ALTBNKSC = N ALTBNKSD = N ALTBNKSE = N ALTBNKSF = N ALTBNKSG = N ALTBNKSH = N ALTBNKSI = N ALTBNKSJ = N ALTBNKSK = N ALTBNKSL = N ALTBNKSM = N ALTBNKSN = N ALTBNKSO = N ALTBNKSP = N NDIRRECA = 02 NDIRRECB = 02 NDIRRECC = 01 NDIRRECD = 01 NDIRRECE = 01 NDIRRECF = 01 NDIRRECG = 01 NDIRRECH = 01 NDIRRECI = 01 NDIRRECJ = 01 NDIRRECK = 01 NDIRRECL = 01 NDIRRECM = 01 NDIRRECN = 01 NDIRRECO = 01 NDIRRECP = 01 NDTARECA = 24 NDTARECB = 00 NDTARECC = 01 NDTARECD = 01 NDTARECE = 01 NDTARECF = 01 NDTARECG = 01 NDTARECH = 01 NDTARECI = 01 NDTARECJ = 01 NDTARECK = 01 NDTARECL = 01 NDTARECM = 01 NDTARECN = 01 NDTARECO = 01 NDTARECP = 01 ODIRDRVA = A ODIRDRVB = A ODIRDRVC = A ODIRDRVD = A ODIRDRVE = A ODIRDRVF = A ODIRDRVG = A ODIRDRVH = A ODIRDRVI = A ODIRDRVJ = A ODIRDRVK = A ODIRDRVL = A ODIRDRVM = A ODIRDRVN = A ODIRDRVO = A ODIRDRVP = A ODTADRVA = A ODTADRVB = A ODTADRVC = A ODTADRVD = A ODTADRVE = A ODTADRVF = A ODTADRVG = A ODTADRVH = A ODTADRVI = A ODTADRVJ = A ODTADRVK = A ODTADRVL = A ODTADRVM = A ODTADRVN = A ODTADRVO = A ODTADRVP = A OVLYDIRA = Y OVLYDIRB = Y OVLYDIRC = Y OVLYDIRD = Y OVLYDIRE = Y OVLYDIRF = Y OVLYDIRG = Y OVLYDIRH = Y OVLYDIRI = Y OVLYDIRJ = Y OVLYDIRK = Y OVLYDIRL = Y OVLYDIRM = Y OVLYDIRN = Y OVLYDIRO = Y OVLYDIRP = Y OVLYDTAA = Y OVLYDTAB = Y OVLYDTAC = Y OVLYDTAD = Y OVLYDTAE = Y OVLYDTAF = Y OVLYDTAG = Y OVLYDTAH = Y OVLYDTAI = Y OVLYDTAJ = Y OVLYDTAK = Y OVLYDTAL = Y OVLYDTAM = Y OVLYDTAN = Y OVLYDTAO = Y OVLYDTAP = Y CRDATAF = N DBLALV = N NDTARECP = 01 ODIRDRVA = A ODIRDRVB = A ODIRDRVC = A ODIRDRVD = A ODIRDRVE = A ODIRDRVF = A ODIRDRVG = A ODIRDRVH = A ODIRDRVI = A ODIRDRVJ = A ODIRDRVK = A ODIRDRVL = A ODIRDRVM = A ODIRDRVN = A ODIRDRVO = A ODIRDRVP = A ODTADRVA = A ODTADRVB = A ODTADRVC = A ODTADRVD = A ODTADRVE = A ODTADRVF = A ODTADRVG = A ODTADRVH = A ODTADRVI = A ODTADRVJ = A ODTADRVK = A ODTADRVL = A ODTADRVM = A ODTADRVN = A ODTADRVO = A ODTADRVP = A OVLYDIRA = Y OVLYDIRB = Y OVLYDIRC = Y OVLYDIRD = Y OVLYDIRE = Y OVLYDIRF = Y OVLYDIRG = Y OVLYDIRH = Y OVLYDIRI = Y OVLYDIRJ = Y OVLYDIRK = Y OVLYDIRL = Y OVLYDIRM ; processes all .REL files (from EXCASM.SUB) ; creating the .COM files and CPM3.SYS file. ; The current drive MUST contain all of the .REL and .SPR ; files and GENCPM files for this to function properly. ; link excwtsys[l100]=excwtsys ; link excboot[l4000]=excboot ; link cpmldr[l4400]=cpmldr,excbios0,excbios1,excbios3,excbios4,excbios6 ; link bnkbios3[b]=excbios0,excbios1,excbios2,excbios3,excbios4,excbios5,scb ; ; create the new cpm3.sys gencpm auto display ; NOTICE: Copy down the last few lines displayed by GENCPM. ; These are the actual addresses for the BDOS/BIOS created! EXCBIOS0MAC EXCBIOS1MAC EXCBIOS2MAC $fEXCBIOS3MAC >EXCBIOS4MAC C:EXCBIOS5MAC RdEXCBIOS6MAC kEXCBIOSELIB oEXCBOOT MAC tEXCWTSYSMAC |*SCB ASM CCP COM xsub ; This will patch CPMLDR.COM to correct its system hangs ; when issuing an error message. CPMLDR from DRI issues ; disable-interrupts then halt. ; This submit uses CP/M 2.x SAVE. SID CPMLDR.COM S1A7 18 FE . S423 18 FE . G0 save 15 cpmldr.com EXCBOOT MAC tEXCWTSYSMAC |*SCB ASM CCP COM DM!>))덑o|gS =S^#V))) DM!>)):S =2S_og^#V) PS^#V|g}o ZS_{ozgO{ozgi`N#Fogo&og_{_z#WBNKBIOS3SPRRESBDOS3SPRBNKBDOS3SPRCPM3 SYSGENCPM DAT . $ ; copy all bios files from the current drive ; The one parameter specifies the destination drive letter. pip $1:=cpm3.sys[ov pip $1:=excboot.com[ov pip $1:=cpmldr.com[ov pip $1:=excwtsys.com[ov pip $1:=ccp.com[ov EXCBIOS4MAC C:EXCBIOS5MAC RdEXCBIOS6MAC kEXCBIOSELIB oEXCBOOT MAC tEXCWTSYSMAC |*SCB ASM CCP COM O ar onl fo us b FO an it members. An mone derive fro th distributio o th schematic an BIO listin shal g t th non-profi organizatio FOG. Al suc copie shal hav th appropriat trademar an copyrigh notice eithe i machin readabl forma o printe o th paper. O an suc copie th followin notic shal appear: "Thi informatio i th exculsiv propert o Osborn Compute Corporatio; Combines files for printing into EXCBIOS.PRN. ; EXCPRT requires three parameters, each being a single letter ; specifying a drive (without the :). (1) is where the source ; files are (2) is where the .PRN files are (3) is where ; EXCBIOS.PRN is to be written. ; eg. EXCPRT A B C ; source on A: .PRN files on B: producing C:EXCBIOS.PRN pip $3:excbios.prn=$2:excbios.prn pip $3:excbios.prn=$3:excbios.prn,$2:excbios0.prn,$2:excbios1.prn pip $3:excbios.prn=$3:excbios.prn,$2:excbios2.prn,$2:excbios3.prn pip $3:excbios.prn=$3:excbios.prn,$2:excbios4.prn,$2:excbios5.prn pip $3:excbios.prn=$3:excbios.prn,$2:excbios6.prn,$2:scb.prn pip $3:excbios.prn=$3:excbios.prn,$2:excboot.prn,$2:excwtsys.prn pip $3:excbios.prn=$3:excbios.prn,$1:cpmldr.sym,$1:bnkbios3.sym EXCBOOT MAC tEXCWTSYSMAC |*SCB ASM CCP COM 1; '[12345678qwertyuiasdfghjkzxcvbnm,0 .po9-/;\l=  "]!@#$%^&*QWERTYUIASDFGHJKZXCVBNM<) >PO(_?:|L+     { }~ `  '[12345678QWERTYUIASDFGHJKZXCVBNM,0 .PO9-/;\L=     { }{ ` 0123456789   GHJKZXCVBNM<) >PO(_?:|L+     { }~ `  '[12345678QWERTYUIASDFGHJKZXCVBNM,0 .PO9-/;\L=     { }{ ` 0123456789   GHJKZXCVBNM<) >PO(_?:|L+     { }~ `  '[12345678QWERTYUIASDFGHJKZXCVBNM,0 .PO9-/;\L=     { }{ ` <20<EXCBOOT MAC tEXCWTSYSMAC |*SCB ASM CCP COM  This is the release date of the disk. CPMLDR REL o CPMLDR SYM rFONTA COM sFONTM COM uGENCPM COM wTENCPM COM -CPM183 DOC GENCPM DAT EXCLINK SUB EXCPATCHSUB EXCPIP SUB EXCPRT SUB ROMRAM COM EXCWTSYS.MQC C5 1E 7040 55 EXCBIOS6.MAC 9B D2 3840 30 EXCBIOSE.LIB B7 24 5120 40 EXCBOOT .MAC D5 7B 7296 57 SCB .ASM 9A A2 2432 19 CCP .COM 35 B7 3200 25 CPMLDR .COM 31 36 3712 29 CPMLDR .REL 48 E2 2944 23 CPMLDR .SYM B5 74 640 5 FONTA .COM 49 DF 2048 16 FONTM .COM 49 DF 2048 16 GENCPM .COM 58 62 21504 168 GENCPM  Fog Library Disk FOG-CPM.183 Copyright (1987) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Disk 1 of 3. Osborne Executive specific programs. Included here is the source for the BIOS and ROM, needed utilitie!s, diagnostic programs, new character sets, etc. Please note that some of these files are proprietary and may be distributed ONLY to FOG members. Filename Description -09-30 .87 This is the release date of the disk. -CPM183 .DOC This is the description of the disk contents. RELEASE .TXT 0B56 2K Information on the release of some of the material contained on these disks. Note: much of this material is proprietary and is released for the exclusive use of FOG members. Do not distribute to others. EXCASM .SUB EC5C 1K ver. 1.2 [Exec BIOS Assembly 1 of 26] Assemble your own Osborne Executive BIOS with these files. Includes GENCPM, the Digital Research utility which OCC forgot to include with the Executive software package, and three OCC utilities needed to build the BIOS. To compile the BIOS, you will need M80, RMAC, LINK, SUBMIT, and XSUB. EXCBIOS .MQC 01BA 13K ver. 1.2 [Exec BIOS Assembly 2 of 26] EXCBIOS2.MQC 7864 16K ver. 1.2 [Exec BIOS Assembly 3 of 26] EXCBIOS0.MAC 7736 4K ver. 1.2 [Exec BIOS Assembly 4 of 26] EXCBIOS1.MAC 75CC 6K ver. 1.2 [Exec BIOS Assembly 5 of 26] EXCBIOS4.MQC BAD7 10K ver. 1.2 [Exec BIOS Assembly 6 of 26] EXCBIOS5.MQC 16ED 16K ver. 1.2 [Exec BIOS Assembly 7 of 26] EXCBIOS3.MAC 5B0A 5K ver. 1.2 [Exec BIOS Assembly 8 of 26] EXCWTSYS.MQC C51E 7K ver. 1.2 [Exec BIOS Assembly 9 of 26] EXCBIOS6.MAC 9BD2 4K ver. 1.2 [Exec BIOS Assembly 10 of 26] EXCBIOSE.LIB B724 5K ver. 1.2 [Exec BIOS Assembly 11 of 26] EXCBOOT .MAC D57B 8K ver. 1.2 [Exec BIOS Assembly 12 of 26] SCB .ASM 9AA2 3K ver. 1.2 [Exec BIOS Assembly 13 of 26] CCP .COM 35B7 4K ver. 1.2 [Exec BIOS Assembly 14 of 26] CPMLDR .COM 3136 4K ver. 1.2 [Exec BIOS Assembly 15 of 26] CPMLDR .REL 48E2 3K ver. 1.2 [Exec BIOS Assembly 16 of 26] CPMLDR .SYM B574 1K ver. 1.2 [Exec BIOS Assembly 17 of 26]  FONTA .COM 49DF 2K ver. 1.2 [Exec BIOS Assembly 18 of 26] FONTM .COM 49DF 2K ver. 1.2 [Exec BIOS Assembly 19 of 26] GENCPM .COM 5862 21K ver. 1.2 [Exec BIOS Assembly 20 of 26] GENCPM .DAT BF9B 3K ver. 1.2 [Exec BIOS Assembly 21 of 26] EXCLINK .SUB 4AE1 1K ver. 1.2 [Exec BIOS Assembly 22 of 26] EXCPATCH.SUB F67C 1K ver. 1.2 [Exec BIOS Assembly 23 of 26] EXCPIP .SUB 53AD 1K ver. 1.2 [Exec BIOS Assembly 24 of 26] EXCPRT .SUB 5B53 1K ver. 1.2 [Exec BIOS Assembly 25 of 26] ROMRAM .COM 9E0F 1K ver. 1.2 [Exec BIOS Assembly 26 of 26] iskf.cheklist.crc ENDIF SELE B STOR diskf-fn-"."-ft TO malt STOR SUBST(ft,1,2) TO mdate SET ALTE TO &malt SET ALTE ON ? filedesc SET ALTE OFF SET ALTE TO SELE A STOR diskf-"-"-SUBST(dfile,5,3)-"&mdiskno"-".DOC" TO malt SET ALTE TO &malt SET ALTE ON DO WHILE diskno="&mdiskno".AND. .NOT. EOF() IF diskno="000" IF dfile="FOG-DOS" ? " "#$%&'